【发布时间】:2020-05-02 02:36:15
【问题描述】:
我正在使用client 与CloudMQTT API 进行交互。我正在尝试create a user,但在尝试了下面提供的代码后,我无法创建用户。在为这个项目使用 Github 存储库中提供的代码时,我注意到我无法使用 ShouldThrow() 方法(显然它应该由 Fluent Assertions 提供)。
我确实在 StackOverflow 上找到了一个 post,它看起来与我遇到的问题非常相似。在问题中提到 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");
在执行方法之前和之后,用户计数将导致相同的数字(显然应该增加)。
【问题讨论】:
-
CreateCloudUser是测试方法还是被测方法? -
这是我自己写的定制方法。它包含在 Github 存储库中找到的测试方法下方提供的相同代码(或至少应该工作相同)。 @Nkosi
标签: c# mqtt fluent-assertions