单元测试未通过,因为未从 api 控制器中看到任何 return

Unit Test not passed, since not seen any return from api controller

我有一个 API 如下:

 private readonly IMyService _myService;
    public MyController(IMyService myService)
    {
        _myService = myService;
    }

    //GET: api/values
    [HttpGet]

    public MyOutput<MyEntity> Get(string f, string o)
    {
        var fItems = JsonConvert.DeserializeObject<Dictionary<string, string>>(f);
        var oItems = GetDictionaryFromStr(o ?? "");

        var myInput = new MyInput<MyEntity>()
        {
            PredicateDictionary = fItems,
            OrderByDictionary = oItems
        };

        var result = _myService.Search(myInput);

        return result;
    }

效果很好。现在,我想使用 MoqXunit; 为我的 API 编写单元测试。我想设置结果的预期值,然后模拟我的 DI 并调用控制器,我期望控制器的 return 值和我的结果相等。但我不知道为什么 var result = api.Get(f, o); 是 null 在 return 之后来自控制器。我的测试有什么问题吗?

    [Fact]
    public void Should_ReturnResult_When_CallingMyApi()
    {
        //Arrange
        var f = "{'Currency':'UR'}";
        var o = "+Amount";

        var fItems = JsonConvert.DeserializeObject<Dictionary<string, string>>(f);
        var oItems = GetDictionaryFromStr(o ?? "");


        var baseServiceMock = new Mock<IMyService>();
        baseServiceMock 
            .Setup(x => x.Serach(It.Is<MyInput<MyEntity>>
                (i => i.PredicateDictionary== fItems
                 && i.OrderByDictionary == oItems
                 && i.Paging == pagingItems
                )))
            .Returns(new MyOutput<MyEntity>()
            {
                OrderByDictionary = oItems,
                PredicateDictionary = fItems
            });

        var api = new MyController(baseServiceMock.Object);



        //Act
        var result = api.Get(f, o);


        ////Assert
        Assert.Equal(result.PredicateDictionary, fItems);
        Assert.Equal(result.OrderByDictionary, oItems);
    }

更新: 我还更改了 baseServiceMock,有和没有 It.Is。在 It.Is 的情况下,我添加了

            baseServiceMock
            .Setup(x => x.Search(It.Is<MuInput<MyEntity>>
                (i => i.PredicateDictionary.Keys == fItems.Keys
                && i.PredicateDictionary.Values == fItems.Values
                && i.OrderByDictionary.Keys == oItems.Keys
                && i.OrderByDictionary.Values == oItems.Values
                && i.Paging == pagingItems
               )))
            .Returns.....

问题是比较 SetUp() 中的两个对象。所以我编辑了如下代码:

 .Setup(x => x.Find(It.Is<MuInput<MyEntity>>
                (i => i.PredicateDictionary.First().Key == "Currency"
                && i.PredicateDictionary.First().Value == "CU_UR"
                && i.OrderByDictionary.First().Key == "Amount"
                 && i.OrderByDictionary.First().Value == "Asc")))