moq一个类,它来自与moq'd相同的接口

时间:2014-05-22 18:32:32

标签: c# class interface moq

我是整个MOQ运动的新手......顺便说一句,这很酷......我现在正在嘲笑各种各样的东西..

无论如何,我遇到了这种情况,并想知道如何嘲笑它。

我有一个实现我想要模拟的接口的类:

public interface ImyInterface
{
    void doit();
}

public abstract class myBase<TChannel> : ICommunicationObject, IDisposable where TChannel : class
{
    protected TChannel Channel { get; private set; }

    // ICommunicationObject implementation not shown
}

public class myIIntClass : myBase<ImyInterface>, ImyInterface
{
    public myIIntClass()
    {
    }

    public void doit()
    {
         Channel.doit();
    }
}

我认为我的moq测试不会模仿任何东西......但我不确定并希望能够对如何正确编写或重构我的课程有所了解:

这是我目前的最小起订量测试:

MyClass myClass = null;

Mock<ImyInterface> moq = new Mock<ImyInterface>();
moq.Setup(x => x.doit());

myClass = (MyClass)moq.Object;

myClass.doit();

moq.VerifyAll();

感谢从一个moqer到另一个......: - )

2 个答案:

答案 0 :(得分:2)

我觉得也许你在这里错过了嘲笑的重点。您模拟了您正在测试的工作单元中存在的依赖项。所以,让我们在doit的具体实现中说我在MyClass进行测试;我想确保它正常工作。现在,让我们说该方法依赖于另一个类;它调用一个返回布尔值的方法。我想要做的是模拟该类,因为我想确保MyClass.doit在返回时true 时表现正确{ {1}}。

在上面的示例中,请参阅我已完成的工作,确保没有其他依赖项影响false的代码流;我强制 MyClass.doit关闭非常具体的路径;我想测试那条路径。

您创建的代码字面上不执行任何操作,因为它只执行模拟方法。

答案 1 :(得分:0)

您不要模拟/存根被测单元。如果您正在测试doIt(),那么您不会模拟它,您可以模拟其(或类)依赖项。