Unit testing 对互斥锁进行单元测试
我们的业务最近转向了TDD风格,我不擅长编写单元测试。我现在写的C#(.NET3.5)部分应该能够验证一个单独的进程正在运行,因为我认为这是使用互斥类的最佳方式 所以我在我的SrsUpdaterController类中有一个方法,就像这样Unit testing 对互斥锁进行单元测试,unit-testing,mutex,Unit Testing,Mutex,我们的业务最近转向了TDD风格,我不擅长编写单元测试。我现在写的C#(.NET3.5)部分应该能够验证一个单独的进程正在运行,因为我认为这是使用互斥类的最佳方式 所以我在我的SrsUpdaterController类中有一个方法,就像这样 public bool IsUpdaterRunning() { Mutex srsUpdaterMutex = new Mutex(false, SRS_UPDATERGUID); if (srsUpdaterMutex.WaitOne(0)
public bool IsUpdaterRunning()
{
Mutex srsUpdaterMutex = new Mutex(false, SRS_UPDATERGUID);
if (srsUpdaterMutex.WaitOne(0)) //If SRS Updater is running
{
srsUpdaterMutex.ReleaseMutex();
srsUpdaterMutex.Close();
return false;
}
else
{
return true;
}
}
我有个测试
[TestMethod()]
public void IsUpdaterRunningTrueTest()
{
SrsUpdaterController target = new SrsUpdaterController();
string mutexGuid = SrsUpdaterController.SRS_UPDATERGUID;
bool expected = true;
bool actual;
Mutex srsUpdaterMutex = new Mutex(false, mutexGuid);
srsUpdaterMutex.WaitOne(3000);
actual = target.IsUpdaterRunning();
srsUpdaterMutex.ReleaseMutex();
srsUpdaterMutex.Close();
Assert.AreEqual(expected, actual);
}
它不起作用,因为单元测试和IsUpdaterRunning方法由同一个线程调用,因此不会使进程自身阻塞。问题是我希望进程阻止其自身,以便它模拟所声明的互斥。有没有办法做到这一点?还是说我的单元测试/进程同步/互斥管理都错了
(注意,我也尝试将互斥锁锁定在从测试启动的单独线程上,但它仍然允许我在两个位置声明互斥锁。这没关系,因为我希望尽可能避免线程)
提前谢谢 这可能是一个最好不要进行单元测试的场景。良好执行的单元测试的一个属性是它应该是低工作量的。理论上,您可以将这段代码分解为可以模拟的层/接口,但手动集成测试这段代码可能更可行。明智地选择战斗。这可能是一个最好不要进行单元测试的场景。良好执行的单元测试的一个属性是它应该是低工作量的。理论上,您可以将这段代码分解为可以模拟的层/接口,但手动集成测试这段代码可能更可行。明智地选择战斗。