Unit testing 对互斥锁进行单元测试

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)

我们的业务最近转向了TDD风格,我不擅长编写单元测试。我现在写的C#(.NET3.5)部分应该能够验证一个单独的进程正在运行,因为我认为这是使用互斥类的最佳方式

所以我在我的SrsUpdaterController类中有一个方法,就像这样

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方法由同一个线程调用,因此不会使进程自身阻塞。问题是我希望进程阻止其自身,以便它模拟所声明的互斥。有没有办法做到这一点?还是说我的单元测试/进程同步/互斥管理都错了

(注意,我也尝试将互斥锁锁定在从测试启动的单独线程上,但它仍然允许我在两个位置声明互斥锁。这没关系,因为我希望尽可能避免线程)


提前谢谢

这可能是一个最好不要进行单元测试的场景。良好执行的单元测试的一个属性是它应该是低工作量的。理论上,您可以将这段代码分解为可以模拟的层/接口,但手动集成测试这段代码可能更可行。明智地选择战斗。这可能是一个最好不要进行单元测试的场景。良好执行的单元测试的一个属性是它应该是低工作量的。理论上,您可以将这段代码分解为可以模拟的层/接口,但手动集成测试这段代码可能更可行。明智地选择战斗。