问题描述
在为 string
显式键入 Setup
时,如何模拟此接口,以免获得空引用异常?
界面
public interface IUtil
{
T GetSetting<T>(string key);
}
代码
var mock = new Mock<IUtil>();
mock.Setup(mk => mk.GetSetting<string>("Jabberwocky")).Returns("Valid");
var uMock = mock as IUtil;
string mySetting = uMock.GetSetting<string>("Jabberwocky"); // GetSetting Returns Null Reference
解决方法
您可以在设置阶段使用 It.AnyType
:
const string expectedInput = "Jabberwocky";
const string expectedOutput = "Valid";
var mock = new Mock<IUtil>();
mock
.Setup(mk => mk.GetSetting<It.IsAnyType>()>(expectedInput))
.Returns(expectedOutput);
,
发生异常是因为我试图将模拟实例转换为接口;这不起作用。我应该一直在投射 .Object
属性,例如
IUtil uMock = mock.Object;