如何解决Moq - 设置通用返回类型
如何在 Moq 中设置通用返回类型?
我有以下界面:
public interface IFoo
{
T Bar<T>();
}
现在我想设置 Bar<T>()
以在测试中工作
var foo = new Mock<IFoo>();
foo.Setup(x => x.Bar<It.IsAnyType>()).Returns(new Mock<???>().Object);
我如何填写 ???
,或者如果不可能,那么我如何返回一个通用模拟?
有 100 多种类型,我尽量避免嘲笑它们。 如果调用为任何类型返回 null,则测试中断(因为代码抛出和异常),遗憾的是,这是默认的非模拟行为。
解决方法
如果 T
是引用类型,即
public interface IFoo {
T Bar<T>() where T : class;
}
那么创建一个纤薄的模型会更容易
public class MockFoo : IFoo {
private MockFoo() {
}
public T Bar<T>() where T : class => Mock.Of<T>();
public static IFoo New() => new MockFoo();
}
可以在安排测试时初始化并使用 MOQ 来模拟 Bar
的输出
//Arrange
IFoo foo = MockFoo.New();
//...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。