在我们的解决方案中,我们曾经有一个非常古老的版本的JustMock。我们编写了大约7000个测试,有时会出现的一个模式是为所有测试用例设置一个特定接口的默认模拟,并且在一些测试中“覆盖”默认的模拟。
这意味着,在几百个测试中,我们创建一个模拟并对其进行排列,然后创建另一个相同类型的模拟,并对其进行排序。然后我们会在第二次模拟中做出断言。
几个月前,我们更新到了当前版本,现在这些相同类型的多个模拟似乎不再起作用了。举下面的例子。我创建了两个相同类型的mock,并断言第二个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
}
}发布于 2018-10-02 08:54:05
实际上,这似乎是对以前版本的JustMock的一种回归。我已将此作为错误报告记录到JustMock反馈门户中。这是一个链接,如果您想订阅状态更新:当有多个具有未满足的预期的模拟时,模拟断言不会失败。JustMock 2019.1.115.2版本解决了这个问题。
发布于 2018-11-09 15:23:45
我刚刚也遇到了同样的问题!您可以使用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不会犯在闭包中查找错误实例的错误,因为您将它直接指定给表达式。
https://stackoverflow.com/questions/52316030
复制相似问题