Moqed方法返回null而不是string

时间:2014-09-09 22:28:25

标签: c# unit-testing mocking moq

我正在使用Moq进行一些C#测试。出于某种原因,我得到的是null而不是字符串。我正在尝试测试

public void Foo(IData data){
    _value = data.GetValue<T>(someString);
}

interface IData
{
    T GetValue<T>(string someString);
}

在我的测试代码中我有

Mock<IData> dataMock = new Mock<IData>();
dataMock.Setup(x => x.GetValue<string>(It.IsAny<string>())).Returns("blah");
Foo(dataMock.Object);

但是当我单步执行时,_value被赋予null。不应该分配"blah"吗?

1 个答案:

答案 0 :(得分:1)

您对T的调用中的通用GetValue参数很可能不是string,因此设置条件不匹配。默认情况下,Moq将从尚未明确设置的方法调用中返回默认值(在这种情况下为null),除非您告诉它为&#34; strict。&#34;

// tell Moq to throw an exception if someone calls a method that you haven't `Setup`
Mock<IData> dataMock = new Mock<IData>(MockBehavior.Strict);