2

测试方法总是失败。在Setup该方法UpdateAsync应该在结果中返回 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;
}
4

1 回答 1

1

松开参数匹配使用It.IsAny<Header>()以获得所需的行为。

//...

_manager
    .Setup(a => a.UpdateAsync(It.IsAny<Header>()))
    .ReturnsAsync(1);

//...

该设置还允许ReturnsAsync设置异步成员。

之前发生的事情是您使用特定的引用实例来设置它。自从您初始化new Header. 这导致模拟返回返回类型的默认值。

参考Moq Quickstart以更好地了解如何使用该框架

于 2021-11-19T16:00:23.130 回答