Moq.Setup没有返回预期的收藏?

时间:2012-01-11 17:20:44

标签: c# unit-testing mocking moq

我有以下代码:

        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?

有什么想法吗?

2 个答案:

答案 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 >()而不是创建具体对象