簡體   English   中英

如何使用 Fluent Assertions 拋出異常?

[英]How could I throw an exception using Fluent Assertions?

我正在使用客戶端CloudMQTT API進行交互。 我正在嘗試創建用戶,但在嘗試下面提供的代碼后,我無法創建用戶。 在為這個項目使用 Github 存儲庫中提供的代碼時,我注意到我無法使用ShouldThrow()方法(顯然它應該由Fluent Assertions提供)。

我確實在 StackOverflow 上找到了一篇帖子,它看起來與我遇到的問題非常相似。 問題中提到 FluentAssertions 不支持異步方法。 但是,在客戶端的示例代碼中,我可以看到使用了ShouldThrow()方法而不管這個事實。

我怎樣才能讓ShoudldThrow()工作或者我什至需要它工作(因為我認為只有在應用單元測試時才應該在這段代碼中需要它)?

這是迄今為止的嘗試:

public static async void CreateCloudUser(ICloudMqttApi client)
{
    var users = await client.GetUsers();
    Console.WriteLine($"Creating a user. Current users available: {users.Count}");
    var expectedUser = new NewUser
    {
        Password = $"{Guid.NewGuid()}",
        Username = $"staging-{Guid.NewGuid()}",
    };

    var createUserResponse = await client.CreateUser(expectedUser);
    createUserResponse.IsSuccessStatusCode.Should().BeTrue();

    var actual = await client.GetUser(expectedUser.Username);
    actual.Should().NotBeNull();
    actual.Username.Should().Be(expectedUser.Username);

    //users.Should().Contain(u => u.Username == expectedUser.Username); // <-- This throws an exception as well, but not of importance for this specific question.

    Func<Task> verifyUser = async () => await client.GetUser(expectedUser.Username);
    verifyUser.ShouldThrow<ApiException>() // <-- Not recognized
            .And.StatusCode.Should().Be(HttpStatusCode.NotFound);

    Console.WriteLine($"Created a user. Current users available: {users.Count}");
}

在調用方法之前,以客戶端文檔中提供的方式定義客戶端:

var client = CloudMqttApi.GetInstance("username", "password");

在執行該方法之前和之后,用戶計數將導致相同的數字(顯然應該增加)。

鑒於所示代碼的異步性質,語法應該是

//...

var deleteResponse = await client.DeleteUser(expectedUser.Username);
deleteResponse.IsSuccessStatusCode.Should().BeTrue();

Func<Task> verifyUser = async () => await client.GetUser(expectedUser.Username);

var exceptionAssertion = await verifyUser.Should().ThrowAsync<ApiException>();
exceptionAssertion.And.StatusCode.Should().Be(HttpStatusCode.NotFound);

//...

參考FluentAssertions:異常

還要避免使用async void 有函數返回Task

public static async Task CreateCloudUser(ICloudMqttApi client) {

    //...

}

參考Async/Await - 異步編程的最佳實踐

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM