我有以下代码:
var service = new Mock<INavigationService>();
service.Setup(x => x.GetSchemes(new SchemeFilterEntity())).Returns(new List<SchemeEntity>
{
new SchemeEntity
{
Id = 1,
Name = "Test"
},
new SchemeEntity
{
Id = 2,
Name = "Test 2"
}
});
var sut = service.Object;
var sut = service.GetSchemes(new SchemeFilterEntity());
但是,当调用GetSchemes方法时,它返回null?
有什么想法吗?
答案 0 :(得分:3)
我认为应该是
service.Setup(x =&gt; x.GetSchemes(It.IsAny&lt; SchemeFilterEntity&gt;()))。返回.....
因为否则,moq将查找您在setup方法中传递的'new SchemeFilterEntity()'的确切实例,该实例永远不会匹配任何其他内容。
编辑:那就是说,你的sut不应该是你在嘲笑的东西,它应该是使用你的模拟对象的东西。
答案 1 :(得分:0)
我不知道你要测试什么,但如果你想要“覆盖”GetSchema
的行为
使用模拟对象,该方法必须在类<{p>}上virtual
如果您想使用模拟对象来存根INAVigationService,您必须执行以下操作
.........
var sut = service.Object;
SomeThing.UseNavigavtionService(sut); //this is supposed to be the class which you will test.Sut is a mocked INavigationService
在您的设置中,您还应该使用It.IsAny< SchemeFilterEntity >()
而不是创建具体对象