簡體   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