gpt4 book ai didi

c# - 单元测试 API 调用

转载 作者:太空宇宙 更新时间:2023-11-03 12:14:30 28 4
gpt4 key购买 nike

我将 .NET Core 与 xUnit/Moq 结合使用来创建单元测试。我想为以下 API 调用创建单元测试:

[HttpGet("{zip}")]
public IActionResult Get(int zip)
{
//debugging here shows the repository has the object
//but the result is always null
Location result = repository[zip];
if(result == null)
{
return NotFound();
}
else
{
return Ok(result);
}
}

我的单元测试(失败)是:

[Fact]
public void Api_Returns_Json_Object()
{
//Arrange
Mock<IRepository> mockRepo = new Mock<IRepository>();
mockRepo.Setup(m => m.Locations).Returns(new Location[]
{
new Location
{
zip = 88012,
type = "STANDARD",
state = "NM"
}
});

//Arrange
ApiController controller = new ApiController(mockRepo.Object);

// Act
var response = controller.Get(88012);

// Assert
Assert.True(response.Equals(HttpStatusCode.OK));
}

当我调试时,存储库显示正确的 Location 对象,但结果始终为 null,返回 NotFound() 状态代码。

如果我使用 PostMan 测试响应,它会正常工作。

以下是相关的 IRepository 成员:

IEnumerable<Location> Locations { get; }
Location this[int zip] { get; }

最佳答案

根据被测方法内部访问的内容,在安排测试时设置了错误的成员

[Fact]
public void Api_Returns_Json_Object() {
//Arrange
int zip = 88012;
var location = new Location
{
zip = zip,
type = "STANDARD",
state = "NM"
};

Mock<IRepository> mockRepo = new Mock<IRepository>();
mockRepo.Setup(m => m[zip]).Returns(location);
var controller = new ApiController(mockRepo.Object);

// Act
var response = controller.Get(zip);
var okResult = response as OkObjectResult;

// Assert
Assert.NotNull(okResult);
Assert.Equal(location, okResult.Value);
}

关于c# - 单元测试 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50425584/

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