1

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

4

2 回答 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 回答