【问题标题】:Is it okay to conduct non-isolated unit testing? [closed]可以进行非隔离单元测试吗? [关闭]
【发布时间】:2020-04-08 06:13:07
【问题描述】:

我创建了一个简单的项目来进行单元测试,这里是示例代码:

        [TestMethod]
        public async Task GetCountry_ShouldReturnAndorra()
        {
            // Arrange
            int countryId = 1;
            string requestUrl = baseUrl + "/Countries/" + countryId;

            // Act
            // GET : /api/v1/Locations/Countries/{countryId} 
            HttpResponseMessage response = await client.GetAsync(requestUrl); 

            // Assert
            Assert.IsTrue(response.IsSuccessStatusCode, "Response StatusCode is not success");

            string value = await response.Content.ReadAsStringAsync();
            Assert.IsNotNull(value);

            var country = DeserializeCountryResponse(value);
            Assert.AreEqual(country.data.Id, countryId);

            Assert.AreEqual(country.errors.Count, 0, 0, "Reponse contains errors");
        }

而这个项目取决于API服务器是否运行以及它的依赖(数据库等)

但是文档说这不是最佳实践 (https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices#characteristics-of-a-good-unit-test):

良好单元测试的特征

...

独立。单元测试是独立的,可以独立运行,并且不依赖于任何外部因素,例如文件系统或数据库。

...

那么你应该走这条路还是有另一条路?

【问题讨论】:

    标签: c# unit-testing asp.net-web-api


    【解决方案1】:

    是的,是的,不是的。它只是不是一个单元测试——它是一个集成测试。它可能使用单元测试“框架”——但它基本上不是单元测试,而是集成测试。

    使用大量集成测试并在您确实需要它们的部分没有任何问题 - 我的许多测试套件都有很大一部分集成测试,因为它们会测试整个网络堆栈的交互,包括(可能会改变) 第三方库。

    只是不要假装它们是单元测试并且隔离部分不在窗外。这确实是一个“定义”问题。单元测试用于测试较小的代码部分。整个 API 端点不是小的代码部分。它们仍然必须经过测试。

    【讨论】:

    • 哦,我太笨了,把集成测试和单元测试混为一谈。那么如果将其称为集成测试,那么我就走对了(我的代码是否符合集成测试的标准)?
    • @IbnAdam 您是否阅读了几个测试部分的定义以及它们应该做什么和不应该做什么?
    • @SirRufo 现在?是的
    • @IbnAdam 好吧,如果它符合集成测试的标准,我不明白你的问题。阅读这个答案和en.wikipedia.org/wiki/Software_testing#Testing_levels
    • @SirRufo 感谢文章的链接,但我想知道,如果您从 C# 集成测试的角度来看,我的代码是正确的还是有不同的(更多正确)方式?
    猜你喜欢
    • 2016-09-14
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多