帮助!
这段代码在我的本地 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
}
}
因此,除了该方法是静态的这一事实之外,它并没有什么特别之处。从那以后,我重构了该方法,使其成为非静态的,效果在此页面的底部。
我之前遇到过类似的问题,这与利用 TypeMock 的 Isolate<> 语法有关,我遇到了相同的场景,测试在本地运行良好(通过 Gallio 测试运行器),但在构建服务器上失败(CC.Net ,加里奥,TypeMock,NCover)。
我在开发和构建框上运行 6.0.4.0 的 TypeMock。
此外,似乎有效的是在 RecordExpectations 块中向下移动第 74 行和第 75 行 - 错误没有显示,但是方法调用根本没有被无声地模拟。
欢迎提出想法。