1

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

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

几个月前我们更新到当前版本,现在这些相同类型的多个模拟似乎不再工作了。举个例子。我创建了两个相同类型的 Mocks 并断言第二个 mock 被调用一次。使用 2012 版的 JustMock,此测试失败,但使用更新的版本则不会失败。

那么 JustMock 在做什么,这会阻止我制作多个相同类型的模拟并对它们进行断言?为什么要这样做?

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
    }
}
4

2 回答 2

1

实际上,这似乎是与以前版本的 JustMock 的回归。我已将此作为错误报告记录到 JustMock 反馈门户中。如果您想订阅状态更新,请使用以下链接:当有多个未满足发生预期的模拟时,模拟断言不会失败。JustMock 2019.1.115.2 版本修复了该问题。

于 2018-10-02T08:54:05.897 回答
0

我刚遇到同样的问题!您可以使用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();

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

于 2018-11-09T15:23:45.950 回答