1

为什么此代码会在运算符中抛出 ShimNotSupportedException?

ShimStreamReader.AllInstances.EndOfStreamGet = ((s)=>calls < 1);

[TestMethod]
        public void GetAllLinesFromFile__()
        { 
            int calls = 0;

            using (ShimsContext.Create())
            {
                ShimStreamReader.AllInstances.EndOfStreamGet = ((s)=>calls < 1);
                ShimStreamReader.AllInstances.ReadLine = (s) =>
                                                             {
                                                                 calls++;
                                                                 return ";;;;;;;;;;";
                                                             };
                var streamFake = new ShimStreamReader();
                var obj = new MyFile(streamFake, ';');

                Assert.IsTrue(obj.GetAllLinesFromFile().Count() == 1);
            }

        }
4

4 回答 4

3

可能是您正在从 Resharper 或其他一些测试运行程序运行测试吗?

我写了一些与此相关的博文,可能会有所帮助:

http://blog.degree.no/2012/09/visual-studio-2012-fakes-shimnotsupportedexception-when-debugging-tests/

http://blog.degree.no/2012/09/unit-testing-visual-studio-2012-fakes-in-team-city/

于 2012-09-13T11:28:11.743 回答
0

我运行了您的代码,并且在 VS 2012 RC 中运行良好。当我在 VS 11 Beta 中打开一个在 VS 2010 中创建的解决方案时,我确实遇到了类似的问题。我想出的唯一解决方法是在 VS 11 Beta 中创建一个新的解决方案。

于 2012-06-17T09:00:21.907 回答
0

可能的原因之一是缺少应该与您的 xxx.fakes.dll 一起生成的 fakesconfig 文件。

我使用了一个中心项目来生成假程序集,并使用依赖于中心项目的其他项目来使用生成的假程序集。

让我们将 Fake 程序集消费项​​目称为 FOO。

我确实遇到了 ShimNotSupportedException。经过一番调查(几天!),我发现 fakesconfig 文件没有与 Fake 程序集一起复制到 FOO.dll 所在的文件夹中。在那里复制 fakesconfig 文件后,我的测试通过了。

希望这可以帮助。

于 2013-03-04T13:52:06.540 回答
0

发生这种情况的另一种情况是您安装了 Typemock 并启用了它。

在 Typemock 上禁用 -> 暂停模拟

于 2014-03-16T20:00:58.663 回答