C# TypeMock 6.0.4.0在不同的框中表现不同
救命啊 这段代码在使用TypeMock的本地VS2010上运行良好,但在通过NCover运行的构建服务器上失败 我的代码:C# TypeMock 6.0.4.0在不同的框中表现不同,c#,unit-testing,ncover,typemock,C#,Unit Testing,Ncover,Typemock,救命啊 这段代码在使用TypeMock的本地VS2010上运行良好,但在通过NCover运行的构建服务器上失败 我的代码: using (RecordExpectations expect = RecorderManager.StartRecording()) { 74: RequestDataLayer.GetAllUsers(); 75: expect.Return(DatabaseUsers); //
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的隔离语法有关,我遇到了相同的场景,测试在本地运行良好(通过Gallio test runner),但在构建服务器上失败(CC.Net、Gallio、TypeMock、NCover)
我正在开发和构建框上运行TypeMock的6.0.4.0
此外,似乎有效的方法是在RecordExpectations块中向下移动第74行和第75行——虽然没有显示错误,但方法调用并没有被无声地模仿
欢迎创意。当我看到这类东西时,通常是:
- 测试顺序-测试在dev框上以一个顺序运行,但在build框上以不同的顺序运行,这揭示了一些问题,比如一些固定装置在运行后没有正确清理
- 环境差异—类似于运行32位构建的开发环境,但运行64位构建的构建服务器
如果您有选择,请升级到最新版本。在每个版本中,Typemock在这些奇怪的问题上都会越来越好,问题可能会在以后的版本中得到解决。当我看到这种情况时,通常是:
- 测试顺序-测试在dev框上以一个顺序运行,但在build框上以不同的顺序运行,这揭示了一些问题,比如一些固定装置在运行后没有正确清理
- 环境差异—类似于运行32位构建的开发环境,但运行64位构建的构建服务器
如果您有选择,请升级到最新版本。随着每个版本的发布,Typemock在这些奇怪的问题上越来越好,问题可能会在以后的版本中得到纠正。免责声明我在Typemock工作 您是否在测试方法或测试类上使用ClearMocks属性?
如果您正在使用该属性,但仍然出现异常,请与我们的支持部门联系:
typemock.com上的支持免责声明我在typemock工作 您是否在测试方法或测试类上使用ClearMocks属性?
如果您正在使用该属性,但仍然出现异常,请与我们的支持部门联系:
typemock.com上的支持好的,我们发现了问题所在——令人尴尬的是,typemock没有通过NAnt脚本正确调用
这仍然是一个谜,但为什么我们没有简单地看到“TypeMock”未启用的错误消息,而是看到了这种奇怪的行为。好的,我们发现了问题所在-令人尴尬的是,TypeMock没有通过NAnt脚本正确调用
这仍然是一个谜,但为什么我们没有简单地看到“TypeMock”未启用的错误消息,而是看到这种奇怪的行为。谢谢,我将尝试与PM一起推动升级路径。当然,在此期间,我会在构建服务器上运行整个套件,但在CC.Net之外,使过程更细粒度和手动。两个框都使用64位操作系统。谢谢,我将尝试使用PM推动升级路径。当然,在此期间,我将尝试订购测试,或在构建服务器上运行整个套件,但在CC.Net之外,使过程更细粒度和手动。两个框都使用64位操作系统。谢谢,我将尝试添加此属性并让您知道。我现在恢复使用AAA语法,并使用一些简单的东西,如:
OemRequestDataLayer fakeDataLayer=Isolate.Fake.Instance()代码>隔离.WhenCalled(()=>fakeDataLayer.GetAllUsers()).WillReturn(oemDatabaseUsers)代码>使用(fakeDataLayer)隔离.Swap.NextInstance()代码>Assert.IsTrue(新的OemRequestDataLayer().GetAllUsers().Length==oemDatabaseUsers.Length)代码>失败,并显示以下消息:TypeMock.TypeMockException:
***在录制块中未找到方法调用。请检查:
`*您是否试图伪造字段而不是属性?`谢谢,我将尝试添加此属性并让您知道。我现在恢复使用AAA语法,并执行以下简单操作:OemRequestDataLayer fakeDataLayer=Isolate.fake.Instance()代码>隔离.WhenCalled(()=>fakeDataLayer.GetAllUsers()).WillReturn(oemDatabaseUsers)代码>使用(fakeDataLayer)隔离.Swap.NextInstance()代码>Assert.IsTrue(新的OemRequestDataLayer().GetAllUsers().Length==oemDatabaseUsers.Length)代码>失败,并显示以下消息:TypeMock.TypeMockException:
***在录制块中未找到方法调用。请检查:
`*您是否试图伪造字段而不是属性?`您能否列出两个字段之间的差异