C# TypeMock 6.0.4.0在不同的框中表现不同

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); //

救命啊

这段代码在使用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的隔离语法有关,我遇到了相同的场景,测试在本地运行良好(通过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:
***在录制块中未找到方法调用。请检查:
`*您是否试图伪造字段而不是属性?`您能否列出两个字段之间的差异