【发布时间】:2020-02-07 07:18:13
【问题描述】:
IFoo
{
string abc();
string def();
}
Foo: IFoo
{
string abc()
{
def();
}
string def()
{
}
}
Mymainclass
{
private IFoo _foo;
public Mymainclass():this(new Foo())
{}
public Mymainclass(IFoo foo)
{
_foo = foo;
}
string mainmethod()
{
_foo.abc();
}
}
[TestClass]
public class Mymainclasstester
{
Mymainclass mainclass;
Mock<IFoo> mifoo;
[TestInitialize]
public void TestInitialize()
{
mifoo = new Mock<IFoo>();
mifoo.Setup(x => x.def(It.IsAny<string>())).Returns("abc");
mainclass = new Mymainclass(mifoo.Object);
}
[TestMethod]
public void testmethod()
{
mainclass.mainmethod();
}
}
正如上面在 testmethod() 中看到的,我正在调用 Mymainclass 类的 mainmethod(),而后者又调用 Foo 类的 abc()。 abc() 调用 def() ,如上面的代码所示。我只嘲笑了def()。 当从 testmethod() 调用时,我想对 Foo 的 abc() 进行实际调用,并且只模拟 def()。
目前使用此实现 abc() 未执行。
谁能帮我解决这个问题?
【问题讨论】:
-
您可以设置
abc来调用def,但目前还不清楚您为什么要这样做,似乎不是正确的方法......类似:mock.Setup(x => x.abc()).Returns(() => mock.Object.def()); -
Moq 不知道你是如何在它的派生类(即 Foo)中实现 IFoo 接口的,这就是它抛出异常的原因。
标签: c# unit-testing moq