【问题标题】:How to decide granularity when it comes to test cases?测试用例如何确定粒度?
【发布时间】:2019-01-20 08:32:25
【问题描述】:

我为 python/django API 编写了一个权限中间件。现在权限取决于 4 个不同属性的组合,我们称它们为 a b c and d

进一步的 c 和 d 可以是 1) 空 2) 单数或 3) 多个值,因此组合甚至会进一步增加。

最初,我决定编写一个测试用例,它会生成组合并使用真值表映射预期结果。

 # Generate all possible combinations
 possible_combinations = list(itertools.product([0, 1], repeat=len(possible_values)))


 for combination in possible_combinations:
            # Get expected result for this combination
            expected_result = get_expected_result(
                test_type=test_type, combination=combination, possible_values=possible_values)

根据组合值,设置为0或1我决定a b c and d的值

现在我作为一个新团队的一员来做这件事,团队成员对这种方法提出了批评,因为它不够精细,也没有遵循让测试用例做一件事的最佳实践。

我对最佳实践的看法是,它们应该非常清楚和明显地服务于目的,而目的可能取决于手头的任务或团队。在这种特殊情况下,团队成员没有提出为什么将这种特殊的测试用例写成细粒度的部分会有所帮助。

最终,我编写了多达 30 个测试用例,其中 80% 是冗余代码。

这场辩论是否有任何客观性,或者这是一个非常主观的呼吁?

【问题讨论】:

    标签: django unit-testing django-rest-framework integration-testing pytest


    【解决方案1】:

    这完全取决于你如何看待它。有时,如果它们过于紧密耦合,在单个单元测试中测试多个事物可能是有意义的,但其他时候,只测试一个场景是有意义的。

    单元测试应该非常明确,其目的应该从名称中明确。您正在使用的方法会将测试方法变成一种黑盒,如果它失败了,将很难跟踪到底是什么错误。在每个测试的情况下,您可以很容易地了解错误在哪里,如果一个测试失败,但在您的情况下,需要一些调试来解决这个问题。这些是保持它们尽可能细化的一些优点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      相关资源
      最近更新 更多