C# JustMock同一接口的多个模拟

C# JustMock同一接口的多个模拟,c#,unit-testing,mocking,justmock,C#,Unit Testing,Mocking,Justmock,在我们的解决方案中,我们曾经有一个非常古老的JustMock版本。我们编写了大约7000个测试,有时会出现的一种模式是为所有测试用例提供某个接口的默认模拟,在一些测试中“覆盖”该默认模拟 这意味着在几百个测试中,我们创建一个模拟并排列它,然后创建另一个相同类型的模拟并排列它。然后我们将对第二个模拟进行断言 几个月前,我们更新到当前版本,现在这些相同类型的多个模拟似乎不再工作。以下面的例子为例。我创建了两个相同类型的mock,并断言第二个mock只调用一次。对于2012版本的JustMock,该测

在我们的解决方案中,我们曾经有一个非常古老的JustMock版本。我们编写了大约7000个测试,有时会出现的一种模式是为所有测试用例提供某个接口的默认模拟,在一些测试中“覆盖”该默认模拟

这意味着在几百个测试中,我们创建一个模拟并排列它,然后创建另一个相同类型的模拟并排列它。然后我们将对第二个模拟进行断言

几个月前,我们更新到当前版本,现在这些相同类型的多个模拟似乎不再工作。以下面的例子为例。我创建了两个相同类型的mock,并断言第二个mock只调用一次。对于2012版本的JustMock,该测试失败,但对于最近的版本,它没有失败

那么JustMock在做什么,阻止我对同一类型的多个Mock进行断言呢?为什么会这样

public interface IFoo
{
    void Bar();
}
[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var bar = Mock.Create<IFoo>();
        Mock.Arrange(() => bar.Bar()).OccursOnce();

        var foo = Mock.Create<IFoo>();
        Mock.Arrange(() => foo.Bar()).OccursOnce();

        Mock.Assert(foo); // Succeeds in recent versions, fails in older versions as I would expect
        //Mock.Assert(bar); // Would fail as expected
    }
}
公共接口IFoo
{
空心钢筋();
}
[测试类]
公共类UnitTest1
{
[测试方法]
公共void TestMethod1()
{
var bar=Mock.Create();
Mock.Arrange(()=>bar.bar()).OccursOnce();
var foo=Mock.Create();
Mock.Arrange(()=>foo.Bar()).ocursOnce();
Assert(foo);//在最新版本中成功,在旧版本中失败,正如我所期望的那样
//Mock.Assert(bar);//将按预期失败
}
}

事实上,这似乎是对以前版本的JustMock的回归。我已将此作为错误报告登录到JustMock反馈门户。如果您想订阅状态更新,请访问以下链接:。
JustMock 2019.1.115.2版本解决了这个问题。

我刚刚遇到了同样的问题!您可以使用
Telerik.JustMock.Helpers
扩展来修复它:

var bar = Mock.Create<IFoo>();
bar.Arrange(x => x.Bar()).OccursOnce();

var foo = Mock.Create<IFoo>();
foo.Arrange(x => x.Bar()).OccursOnce();
var bar=Mock.Create();
Arrange(x=>x.bar()).ocursOnce();
var foo=Mock.Create();
foo.Arrange(x=>x.Bar()).ocursOnce();

现在
JustMock
不会在闭包中错误地找到错误的实例,因为您直接将其指定给表达式。

或者,您可以使用
Telerik.JustMock.Helpers
并将实例传递给表达式。