スレッド化されたコードをテストする単体テストがあります。別のスレッドで呼び出されているメソッドの 1 つをシムしていますが、テストが実行されると、偽のメソッドの代わりに製品コードが実行されます。単体テストと同じスレッドでコードを実行すると、偽のメソッドが呼び出されることをテストしました。これは既知の制限ですか? ありがとう
質問する
482 次
2 に答える
2
OK、スレッド化されたメソッドが呼び出される前に ShimsContext が破棄されたことがわかりました。VS fake はグローバルであり、すべてのスレッドに適用されます。
于 2013-10-29T20:38:18.297 に答える
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);
}
于 2013-10-30T09:24:47.447 に答える