gpt4 book ai didi

asp.net - 单元测试未通过,因为没有看到 api Controller 的任何返回

转载 作者:行者123 更新时间:2023-11-28 21:27:10 24 4
gpt4 key购买 nike

我有一个 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 并调用 Controller ,我期望 Controller 的返回值和我的结果相等。但我不知道为什么在从 Controller 返回后 var result = api.Get(f, o); is null 的结果。我的测试有什么问题吗?

    [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")))

关于asp.net - 单元测试未通过,因为没有看到 api Controller 的任何返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37108660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com