最小起订量;单元测试 - 方法总是失败。 ISetup 不工作
Moq; Unit Test - Method is always failing. ISetup is not working
测试方法总是失败。在 Setup
之后,方法 UpdateAsync
应该在结果中 return 1 但它始终保持为 0,这会导致控制器方法出现异常。
你能告诉我这里缺少什么吗?
[Test]
public async Task UpdateImportHeaderAsyncTest()
{
//Arrange
HeaderRequest request = new HeaderRequest()
{
ConfigurationId = 1,
Key = "1",
Status = 1
};
_manager.Setup(a => a.UpdateAsync(_mockData.Header)).Returns(Task.FromResult(1));
//Act
var actual = await Controller.UpdateHeaderAsync(request);
//Assert
Assert.NotNull(actual);
}
//Controller Method
[HttpPut]
public async Task<int> UpdateHeaderAsync(HeaderRequest request)
{
var result = 0;
try
{
result = await _manager.UpdateAsync(new Header()
{
HeaderId = request.Id,
Status = request.Status,
ConfigurationId = request.ConfigurationId
});
if (result == 0)
{
throw new RecordNotFoundException("No records found.", "1", "");
}
}
catch (Exception ex)
{
throw;
}
return result;
}
使用 It.IsAny<Header>()
放松参数匹配以获得所需的行为。
//...
_manager
.Setup(a => a.UpdateAsync(It.IsAny<Header>()))
.ReturnsAsync(1);
//...
该设置还允许 ReturnsAsync
设置异步成员。
之前发生的事情是您使用特定的引用实例对其进行设置。该实例与您初始化 new Header
后进行测试时使用的实例不同。这导致模拟 return return 类型的默认值。
参考Moq Quickstart以更好地了解如何使用该框架
测试方法总是失败。在 Setup
之后,方法 UpdateAsync
应该在结果中 return 1 但它始终保持为 0,这会导致控制器方法出现异常。
你能告诉我这里缺少什么吗?
[Test]
public async Task UpdateImportHeaderAsyncTest()
{
//Arrange
HeaderRequest request = new HeaderRequest()
{
ConfigurationId = 1,
Key = "1",
Status = 1
};
_manager.Setup(a => a.UpdateAsync(_mockData.Header)).Returns(Task.FromResult(1));
//Act
var actual = await Controller.UpdateHeaderAsync(request);
//Assert
Assert.NotNull(actual);
}
//Controller Method
[HttpPut]
public async Task<int> UpdateHeaderAsync(HeaderRequest request)
{
var result = 0;
try
{
result = await _manager.UpdateAsync(new Header()
{
HeaderId = request.Id,
Status = request.Status,
ConfigurationId = request.ConfigurationId
});
if (result == 0)
{
throw new RecordNotFoundException("No records found.", "1", "");
}
}
catch (Exception ex)
{
throw;
}
return result;
}
使用 It.IsAny<Header>()
放松参数匹配以获得所需的行为。
//...
_manager
.Setup(a => a.UpdateAsync(It.IsAny<Header>()))
.ReturnsAsync(1);
//...
该设置还允许 ReturnsAsync
设置异步成员。
之前发生的事情是您使用特定的引用实例对其进行设置。该实例与您初始化 new Header
后进行测试时使用的实例不同。这导致模拟 return return 类型的默认值。
参考Moq Quickstart以更好地了解如何使用该框架