最小起订量;单元测试 - 方法总是失败。 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以更好地了解如何使用该框架