.net 核心 API 非回归测试最佳实践

时间:2021-07-26 07:24:07

标签: .net-core

我目前正在处理许多 .NET Core API 项目,并遇到了未来可能的回归。 你们如何防止这种情况?

这是我的架构:

  1. API 项目
  2. 业务层
  3. API.UnitTests(参考文献 2)
  4. API.IntegrationTests(参考 1 #for the casts)

集成测试示例:

[Fact]
    public async Task TestGetAll()
    {
        // Arrange
        var query = "api/v1/xxx/getall";

        // Act
        var response = await _AuthorizedClient.GetAsync(query);

        // Assert
        Assert.True(response.IsSuccessStatusCode);

        var results = JsonConvert
            .DeserializeObject<List<MyResult>>(await response.Content.ReadAsStringAsync());
        Assert.True(results.Any());
        //Assert.AnythingOn(results);
    }

考虑下一个版本和/或我的[同事]维护;使用我的反序列化转换,MyResult 对象的更新可能会被隐藏并导致生产回归。

我尝试使用 dynamic 关键字进行集成测试,但不进行强制转换,但这需要我付出很多努力。

你是如何处理这种情况的? 有什么最佳做法吗?

[编辑] 经过一番搜索,我发现这篇文章Differential Regression Testing for REST APIs 看起来很有趣

1 个答案:

答案 0 :(得分:0)

根据我的经验,动态不是一个好的做法,因为它永远不会在构建时失败,但在执行时会失败。 我认为你应该使用这样的东西:

public static T DeserializeObject<T>(string value)
{
    T result = default(T);
    try {
        result = JsonConvert.DeserializeObject<T>(value);
    }
    return result;
}