我有一个看起来像这样的类:
class MyClass {
private IDependency dep;
public MyClass(IDependency dep) {
this.dep = dep;
this.dep.Reset();
}
public void Clear() {
this.dep.Reset();
}
}
如何在忽略构造函数的作用的情况下测试在 Clear 方法中是否正确调用了 Reset 方法?
我的最小起订量测试如下所示:
MockRepository mocks = new MockRepository(MockBehavior.Default);
var dep = mocks.Create<IDependency>();
dep.Setup(s => s.Reset());
MyClass myclass = new MyClass(dep.Object);
myclass.Clear():
state.Verify(s => s.Reset(), Times.Exactly(1));
失败是因为 Reset 被调用了两次(一次在构造函数中,一次在 Clear 方法中)。
最佳答案
我希望有更好的方法,但模拟会记录所有对 Reset
的调用,因此使用标准的 Verify
调用将始终返回 2。下面维护一个单独的柜台,这不是很优雅。如果 Moq 有内置的方法来执行此操作,我很想知道。
int clearResetCount = 0;
Mock<IDependency> dep = new Mock<IDependency>();
MyClass myclass = new MyClass(dep.Object);
dep.Setup(s => s.Reset()).Callback(() => clearResetCount++);
Assert.AreEqual(0, clearResetCount, "Expected clear reset count - before.");
myclass.Clear();
Assert.AreEqual(1, clearResetCount, "Expected clear reset count - after.");
关于c# - 构造函数使用模拟对象,如何隔离测试方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4769676/