如何使用Moq来确定是否调用方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

我的理解是,如果我调用更高级别的方法,我可以测试是否会发生方法调用,即:

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

    internal abstract void SomeOtherMethod();
}

我想测试一下,如果我打电话,SomeMethod()那么我预计SomeOtherMethod()会被调用。

我是否认为这种测试在模拟框架中可用?

提问于
用户回答回答于

可以通过使用验证来查看你所模拟的东西中的方法是否已被调用,例如:

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();
}

如果该行被左加注释,则在调用Value时,它将抛出一个MockException。如果没有注释,它就会过去。

用户回答回答于

不,模拟测试假设你正在使用某些可测试的设计模式,其中之一是注入。在你的情况下,你将会进行测试,SomeClass.SomeMethod 并且SomeOtherMethod必须在另一个需要接口的实体中实现。

你的Someclass构造函数看起来像New(ISomeOtherClass)。然后,你会嘲笑ISomeOtherClass并设定期望值,SomeOtherMethod并验证期望值。

扫码关注云+社区