1

スレッド化されたコードをテストする単体テストがあります。別のスレッドで呼び出されているメソッドの 1 つをシムしていますが、テストが実行されると、偽のメソッドの代わりに製品コードが実行されます。単体テストと同じスレッドでコードを実行すると、偽のメソッドが呼び出されることをテストしました。これは既知の制限ですか? ありがとう

4

2 に答える 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 に答える