JustMock 同一个接口的多个 Mock
JustMock multiple Mocks of same interface
在我们的解决方案中,我们曾经有一个非常古老的 JustMock 版本。我们编写了大约 7000 个测试,有时会出现一种模式,即为所有测试用例使用特定接口的默认模拟,并且在某些测试中 "override" 默认模拟。
这意味着在几百个测试中,我们创建一个模拟并对其进行排列,然后创建另一个相同类型的模拟并进行排列。然后我们会对第二个模拟做出断言。
几个月前我们更新到当前版本,现在这些相同类型的多个模拟似乎不再起作用。以下面的例子为例。我创建了两个相同类型的模拟并断言第二个模拟被调用一次。对于 JustMock 的 2012 版本,此测试失败,但对于更新的版本,它不会失败。
那么 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
}
}
确实,这似乎是对以前版本 JustMock 的回归。我已将此作为错误报告记录到 JustMock 反馈门户中。如果您想订阅状态更新,请点击 link:Mock assert doesn't fail when there are multiple mocks with occurrence expectations that are not satisfied。
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();
现在 JustMock
在闭包中查找错误的实例不会出错,因为您直接将其指定给表达式。
在我们的解决方案中,我们曾经有一个非常古老的 JustMock 版本。我们编写了大约 7000 个测试,有时会出现一种模式,即为所有测试用例使用特定接口的默认模拟,并且在某些测试中 "override" 默认模拟。
这意味着在几百个测试中,我们创建一个模拟并对其进行排列,然后创建另一个相同类型的模拟并进行排列。然后我们会对第二个模拟做出断言。
几个月前我们更新到当前版本,现在这些相同类型的多个模拟似乎不再起作用。以下面的例子为例。我创建了两个相同类型的模拟并断言第二个模拟被调用一次。对于 JustMock 的 2012 版本,此测试失败,但对于更新的版本,它不会失败。
那么 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
}
}
确实,这似乎是对以前版本 JustMock 的回归。我已将此作为错误报告记录到 JustMock 反馈门户中。如果您想订阅状态更新,请点击 link:Mock assert doesn't fail when there are multiple mocks with occurrence expectations that are not satisfied。 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();
现在 JustMock
在闭包中查找错误的实例不会出错,因为您直接将其指定给表达式。