【发布时间】:2015-03-15 10:14:59
【问题描述】:
我无法为带有可选参数的方法设置模拟。假设我有一个类和接口,例如:
public class Bird : iBird
{
public void Chirp(string name = "BigBird")
{
System.Diagnostics.Debug.WriteLine(name);
}
}
public interface iBird
{
void Chirp(string name = "Tweetie");
}
如果我使用参数设置 Chirp 方法模拟:
[TestClass]
public class BirdTests
{
[TestMethod]
public void chirpTest()
{
var c = new Mock<Bird>();
c.Setup(x => x.Chirp(It.IsAny<string>()));
c.Object.Chirp("Woody");
}
}
当我运行测试时,我得到:
测试方法 BirdTests.chirpTest 抛出异常: System.NotSupportedException:非虚拟机上的设置无效 (在 VB 中可重写)成员:x => x.Chirp(It.IsAny())
如果我将 It.IsAny() 取出,它将无法编译。
如何模拟这个方法?
【问题讨论】:
-
从错误信息来看,似乎不是
virtual的方法是问题所在,而不是可选参数 -
你是对的,我是瞎子。那么,如果你不添加答案,我怎么给你积分呢?
-
我可以添加一个更详细的答案
-
如果你模拟
iBird,它应该可以正常工作。请注意,在模拟具体对象时,您还应该考虑是否应该调用基类方法。 -
卡莱布,你是对的。像魅力一样工作。
标签: c# unit-testing moq