使用Moq来确定一个方法是否被调用

这是我的理解,我可以testing,如果我调用更高级别的方法,将发生方法调用,即:

public abstract class SomeClass() { public void SomeMehod() { SomeOtherMethod(); } internal abstract void SomeOtherMethod(); } 

我想testing,如果我打电话SomeMethod()那么我期望SomeOtherMethod()将被调用。

我是否正确地认为这种testing在模拟框架中是可用的?

你可以看到一个你嘲笑的东西被一个方法调用了,例如:

 static void Main(string[] args) { Mock<ITest> mock = new Mock<ITest>(); ClassBeingTested testedClass = new ClassBeingTested(); testedClass.WorkMethod(mock.Object); mock.Verify(m => m.MethodToCheckIfCalled()); } class ClassBeingTested { public void WorkMethod(ITest test) { //test.MethodToCheckIfCalled(); } } public interface ITest { void MethodToCheckIfCalled(); } 

如果该行被留下评论,则在调用Verify时将抛出一个MockException。 如果没有注释,它会通过。

不,模拟testing假设你正在使用某些可testing的devise模式,其中之一是注入。 在你的情况下,你将testingSomeClass.SomeMethodSomeOtherMethod必须在另一个需要接口的实体中实现。

你的Someclass构造函数看起来像New(ISomeOtherClass) 。 然后你会嘲笑ISomeOtherClass并设置SomeOtherMethod的期望被调用,并validation期望。