繁体   English   中英

为什么使用HostType(“ Moles”)进行的单元测试中的断言在单独运行时可以通过,而在一组测试中运行时却失败?

[英]Why would an assert on a unit test with HostType(“Moles”) pass when run individually, but fail when run with a group of tests?

我最近上了Pex&Moles潮流,用一些静态,非虚拟,密封等元素来测试某些逻辑。最近,我开始看到一些测试无法解释的行为。

我断的接口的几种方法都返回void,因此我将存根设置为委托,这些委托会更新布尔变量以指示已被调用。 这是我在做什么:

[TestMethod]
[HostType("Moles")]
    public void UnitTestX()
    {
        bool disposeCalled = false;
        bool getCalled = false;

        ClassX classX = new ClassX();
        var data = new SIClassXData
                       {
                           Dispose = () => disposeCalled = true,
                           Get = () => getCalled = true,
                           ClassXGet = () => classX
                       };

        MDataLayerFactory.CreateDataLayerObject(() => (IClassXData)data);

        Assert.IsTrue(disposeCalled);
        Assert.IsTrue(getCalled);
    }

无论出于何种原因,如果我单独运行此测试,上述断言都会成功。 但是,如果我将测试与程序集中的其他所有测试一起运行(使用Visual Studio的“在解决方案中运行所有测试”功能),则第一个断言将失败。

我想知道为什么会发生这种情况,以及我需要更改以解决此问题的原因。

难道这只是使用多个线程执行测试的“运行所有测试”的副作用? 那么,在Assert触发时Dispose()尚未运行?

尝试使用ManualResetEvent阻止测试方法,直到Dispose()运行为止? 就像是;

public void UnitTestX()
{
    // use this to block the test thread until Dispose() is run
    ManualResetEvent mre = new ManualResetEvent(false);

    bool disposeCalled = false;
    bool getCalled = false;

    ClassX classX = new ClassX();
    var data = new SIClassXData
                   {
                       Dispose = () => { 
                          disposeCalled = true; 
                          mre.Set(); // release the test thread now
                       },
                       Get = () => getCalled = true,
                       ClassXGet = () => classX
                   };

    MDataLayerFactory.CreateDataLayerObject(() => (IClassXData)data);

    Assert.IsTrue(mre.WaitOne(1000)); // give it a second to fire
    Assert.IsTrue(disposeCalled);
    Assert.IsTrue(getCalled);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM