g t*_*g t 8 c# unit-testing locking
我如何编写单元测试以确保获得锁定?
例如:
public void AddItem(object item)
{
lock (_list)
{
_list.Add(item)
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法确保lock语句运行?
编辑:我不是要试图证明线程安全(我会假设),只是调用了lock()语句.
例如,我可以new object()通过在CreateObject()工厂函数中替换它来测试语句.
就像测试任何其他东西一样:编写一个没有它就会失败的测试。换句话说,首先确定为什么要编写锁,然后编写一个测试来指定该原因。我认为原因是线程安全:如果是这样,请编写多线程测试。如果是其他原因,就进行测试。
如果您真的非常想测试调用锁而不是测试锁导致的行为,请封装:
public class MyLock : IDisposable
{
private object _toLock;
public MyLock(object toLock)
{
_toLock = toLock;
Monitor.Enter(_toLock);
}
public virtual void Dispose()
{
Monitor.Exit(_toLock);
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您还必须创建一个可模拟工厂。对我来说似乎有点过头了,但也许在你的背景下这是有道理的。
| 归档时间: |
|
| 查看次数: |
6713 次 |
| 最近记录: |