帮助!
这段代码在我使用TypeMock的本地VS2010上运行得很好,但是在我们的构建服务器上运行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
}
}因此,除了该方法是静态的之外,它没有任何特殊之处。从那时起,我重构了这个方法,使其成为非静态的,在这个页面的底部产生效果。
我之前遇到过一个类似的问题,这与利用TypeMock的Isolate<>语法有关,我遇到了相同的场景,测试在本地运行良好(通过Gallio test runner),但在构建服务器上失败(CC.Net、Gallio、TypeMock、NCover)。
我在开发和构建机器上都运行了6.0.4.0的TypeMock。
此外,似乎起作用的是将RecordExpectations块中的第74行和第75行向下移动-错误没有显示,但方法调用并没有被默默地模仿。
欢迎有想法。
发布于 2011-12-08 00:57:08
好了,我们找到了问题所在--令人尴尬的是,没有通过NAnt脚本正确地调用TypeMock。
然而,这仍然是一个谜,但是为什么我们没有简单地看到"TypeMock“is not enabled错误消息,而是看到了这种奇怪的行为。
发布于 2011-12-07 05:46:23
当我看到这类事情时,通常是:
我的博客上有a troubleshooting guide for these hard-to-figure-out issues。试着浏览一下,看看其中有没有可能对你有帮助的。
我要说的是:找出导致问题的夹具有时是一个漫长而痛苦的过程。我一直到了从单元测试程序集中删除所有fixture,然后重新添加它们,一次一个,直到问题再次出现为止。你可能需要有一点耐心。
如果你有选择的话,升级到最新的版本。随着每个版本的发布,Typemock在这些奇怪的问题上变得越来越好,这个问题可能会在以后的版本中自我修正。
发布于 2011-12-07 16:54:13
免责声明我在Typemock工作。
您是否在测试方法或测试类上使用ClearMocks属性?
如果您正在使用该属性,但仍收到异常,请联系我们的支持人员:
typemock.com上的支持
https://stackoverflow.com/questions/8403572
复制相似问题