[英]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.