我是整个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到另一个......: - )
答案 0 :(得分:2)
我觉得也许你在这里错过了嘲笑的重点。您模拟了您正在测试的工作单元中存在的依赖项。所以,让我们在doit
的具体实现中说我在MyClass
进行测试;我想确保它正常工作。现在,让我们说该方法依赖于另一个类;它调用一个返回布尔值的方法。我想要做的是模拟该类,因为我想确保MyClass.doit
在返回时true
和时表现正确{ {1}}。
在上面的示例中,请参阅我已完成的工作,确保没有其他依赖项影响false
的代码流;我强制 MyClass.doit
关闭非常具体的路径;我想测试那条路径。
您创建的代码字面上不执行任何操作,因为它只执行模拟方法。
答案 1 :(得分:0)
您不要模拟/存根被测单元。如果您正在测试doIt()
,那么您不会模拟它,您可以模拟其(或类)依赖项。