繁体   English   中英

单元测试应该失败

[英]Unit test should be failing

我正在尝试为GenerateTokenAsync()编写单元测试

public async Task<string> GenerateTokenAsync()
{
    Verify.IsNotNullOrWhiteSpace(ClientId, nameof(ClientId));
    Verify.IsNotNullOrWhiteSpace(ClientSecret, nameof(ClientSecret));
    Verify.IsNotNullOrWhiteSpace(TenantId, nameof(TenantId));

    var clientCredential = new ClientCredential(ClientId, ClientSecret);
    var context = new AuthenticationContext(Constants.AuthenticationContextUrl + TenantId);
    var authResult = await context.AcquireTokenAsync(Constants.AuthResultUrl, clientCredential);

    return authResult?.AccessToken;
}

并且有3个必须具有值的属性。

我期望Verify.IsNotNullOrWhiteSpace()引发异常,但事实并非如此。

这是一个静态助手类,该类抛出ArgumentException()

测试应该失败,因为没有为所有3个属性提供值。

我试图更改单元测试,但无法正常工作。

[TestMethod]
public async Task GenerateTokenAsync_WhenExecuted_GeneratesToken()
{
    // Arrange
    var mockAzureClient = new Mock<IAzureClient>();
    mockAzureClient.Setup(m => m.GenerateTokenAsync()).ReturnsAsync(Guid.NewGuid().ToString("N"));

    // Act
    var token = await mockAzureClient.Object.GenerateTokenAsync();

    // Assert
    token.Should().NotBeNullOrWhiteSpace();
}

这可能是一个XY问题,因为您似乎在嘲笑被测对象。

在这种情况下,我认为无需使用Mock来测试上述功能。 创建一个实例并调用被测成员

[TestMethod]
public async Task GenerateTokenAsync_WhenExecuted_WithoutProperties_ShouldFail() {
    // Arrange
    IAzureClient azureClient = new AzureClient(); //Assuming name here
    ArgumentException actual = null;

    // Act
    try {
        var token = await azureClient.GenerateTokenAsync();
    } catch(ArgumentException ex) {
        actual = ex;
    }

    // Assert
    actual.Should().NotBeNull();
}

您基本上是在测试外部SDK,这不是您应该关注的事情。

SDK可以轻松更改,做事的方法和方式也可以更改,您对此无能为力。 一旦任何更改,此代码就有可能无法正常工作。

SDK作者提供的测试很可能涵盖了该代码,在这种情况下,您究竟要实现什么? 我不能称其为单元测试,因为它不是一个。 这是一个集成测试,也不是一个非常有用的测试。

我建议您专注于测试调用SDK的代码。 确保您不使用空参数调用SDK,该代码是您自己的并且可以控制它。 进行测试,然后将SDK测试留给自己的作者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM