VisualStudio Shim不能在不同的线程上工作

时间:2013-10-29 17:42:07

标签: microsoft-fakes

我有一个测试线程代码的单元测试。 我在一个不同的线程中调用一个方法,但是当执行测试时,执行生产代码而不是我的假方法。 我已经测试过,如果我在与单元测试相同的线程中运行代码,则会调用我的假方法。 这是已知的限制吗? 感谢

2 个答案:

答案 0 :(得分:2)

好的事实证明ShimsContext在我的线程方法被调用之前被释放了。 VS fake是全局意义,它适用于所有线程。

答案 1 :(得分:0)

我发现添加更长时间的睡眠可以解决这个问题,正如你所说的那样ShimsContext在调用自己的垫片时被处理掉了:

        using (ShimsContext.Create())
        {
            bool shimcalled = false;
            ShimClass1 h = new ShimClass1();
            ShimClass1.MyStaticMethodToBeShimed = () =>
            {
                shimcalled = true;
            };


            new Class1().MyMethodUnderTest();

            Thread.Sleep(1000); //or wait with a while loop till shimcalled = true: 
            //int couter = 0; while (counter < 100 && shimcalled == false) { counter++; Thread.Sleep(10);}

            Assert.IsTrue(shimcalled);
        }