我有一个测试线程代码的单元测试。我正在调整在不同线程中调用的方法之一,但是在执行测试时,将执行生产代码而不是我的假方法。我已经测试过,如果我在与单元测试相同的线程中运行代码,则会调用我的假方法。这是已知的限制吗?谢谢
问问题
482 次
2 回答
2
好的,原来 ShimsContext 在我的线程方法被调用之前就被释放了。VS fake 是全局的,意味着它适用于所有线程。
于 2013-10-29T20:38:18.297 回答
0
我发现添加更长的睡眠时间可以解决问题,正如您所说的 ShimsContext 是在它自己应该被调用的 shim 时处理的:
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);
}
于 2013-10-30T09:24:47.447 回答