我有一个测试线程代码的单元测试。 我在一个不同的线程中调用一个方法,但是当执行测试时,执行生产代码而不是我的假方法。 我已经测试过,如果我在与单元测试相同的线程中运行代码,则会调用我的假方法。 这是已知的限制吗? 感谢
答案 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);
}