我无法为具有可选参数的方法设置模拟。假设我有一个类和接口,如:
public class Bird : iBird
{
public void Chirp(string name = "BigBird")
{
System.Diagnostics.Debug.WriteLine(name);
}
}
public interface iBird
{
void Chirp(string name = "Tweetie");
}
如果我使用参数设置Chirp方法mock:
[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 =&gt; x.Chirp(It.IsAny())
如果我拿出It.IsAny(),它就不会编译。
我如何模仿这种方法?
答案 0 :(得分:1)
问题实际上是该方法未标记为virtual
,而不是该方法具有可选参数:
测试方法BirdTests.chirpTest引发异常:System.NotSupportedException:非虚拟(在VB中可覆盖)成员上的无效设置:x =&gt; x.Chirp(It.IsAny())
为了使用Moq模拟方法,必须将该方法标记为virtual
,以便Moq生成的代理类可以提供它自己实现的模拟方法<。 / p>