TypeMock 6.0.4.0在不同的框上表现不同

时间:2011-12-06 16:46:04

标签: c# unit-testing ncover typemock

帮助!

此代码在我的本地VS2010上使用TypeMock正常工作,但在我们的构建服务器上运行时,在NCover上运行时失败。

我的代码:

 using (RecordExpectations expect = RecorderManager.StartRecording())
    {
74:             RequestDataLayer.GetAllUsers();
75:             expect.Return(DatabaseUsers);
                // other definitions to follow
    }

在CruiseControl.Net环境中产生此错误:

Execute
TypeMock.TypeMockException: 
*** Cannot use Return in this sequence, there must be a mocked statement first
Perhaps you are trying to mock a method from mscorlib
   at TypeMock.RecordExpectations.b(String A_0)
   at TypeMock.RecordExpectations.a(String A_0)
   at TypeMock.RecordExpectations.Return(Object returnValue)
   at Request.UserSyncTest.SyncData() in UserSyncTest.cs:line 75

我尝试模拟的方法的来源是:

public class RequestDataLayer
{
        public static User[] GetAllUsers()
        {
            // some LINQ magic to get users out of DB, then a .ToArray()
            // returns an object array
        }
}

除了方法是静态的这一事实之外,它没有任何特殊之处。从那时起,我重构了该方法,使其成为非静态的,影响本页底部。

我以前遇到过类似的问题,这与利用Isolate<>有关。 TypeMock的语法,我遇到了同样的情况,测试在本地运行良好(通过Gallio测试运行器),但在构建服务器(CC.Net,Gallio,TypeMock,NCover)上失败。

我在dev和build框上运行了6.0.4.0的TypeMock。

此外,似乎有用的是在RecordExpectations块中向下移动第74和第75行 - 错误没有显示,但方法调用根本没有被静默模拟。

欢迎提示。

3 个答案:

答案 0 :(得分:4)

当我看到这种事情时,通常是:

  • 测试订购 - 测试在开发箱上以一个顺序运行,但在构建盒上的顺序不同,这可以解决一些问题,例如一些固定装置没有正确清理它们。
  • 环境差异 - 例如运行32位构建的开发环境,但构建服务器运行64位构建。

我的博客上有a troubleshooting guide for these hard-to-figure-out issues。尝试浏览它,看看它们中是否有任何一个可能会帮助你。

我会这样说:找出导致问题的夹具有时是一个漫长而痛苦的过程。我一路走到了从单元测试组件中移除所有灯具并一次一个地添加它们直到问题重新出现的程度。你可能需要有点耐心。

如果您有选择,请升级到最新版本。对于每个版本,Typemock会对这些奇怪的问题做得越来越好,问题可能会在以后的版本中自行解决。

答案 1 :(得分:0)

免责声明我在Typemock工作。

您是在测试方法或测试类上使用ClearMocks属性吗? 如果您正在使用该属性并仍然获得例外,请联系我们的支持:
在typemock.com上支持

答案 2 :(得分:0)

好的,我们发现问题是什么 - 通过NAnt脚本没有正确调用TypeMock。

这仍然是个谜但是为什么我们不是简单地看到“TypeMock”没有启用错误信息,而是这种奇怪的行为。