【问题标题】:Moq; Unit Test - Method is always failing. ISetup is not working起订量;单元测试 - 方法总是失败。 ISetup 不工作
【发布时间】:2021-12-30 08:02:13
【问题描述】:

测试方法总是失败。在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;
}

【问题讨论】:

  • 你曾经嘲笑过 HTTPContext.Current.request 吗??

标签: unit-testing moq c#-3.0 controller-tests


【解决方案1】:

使用It.IsAny&lt;Header&gt;()松开参数匹配以获得所需的行为。

//...

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

//...

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

之前发生的事情是您使用特定的引用实例来设置它。由于您初始化了new Header,因此该实例与执行测试时使用的实例不同。这导致模拟返回返回类型的默认值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2021-12-15
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多