我正在使用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"
吗?
答案 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);