使用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.SomeMethod
和SomeOtherMethod
必须在另一个需要接口的实体中实现。
你的Someclass
构造函数看起来像New(ISomeOtherClass)
。 然后你会嘲笑ISomeOtherClass
并设置SomeOtherMethod
的期望被调用,并validation期望。