关于测试用例,如何确定粒度?

时间:2019-01-20 08:32:25

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

我已经为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的值

现在,我正在作为新团队的一部分来进行此操作,并且团队成员对该方法提出了批评,因为该方法不够精细,并且不遵循让测试用例做一件事的最佳实践。

我对最佳做法的看法是,它们应该非常清楚明确地达到一个目的,并且该目的可以取决于手头的任务或团队。在这种特殊情况下,团队成员未能提出建议,将这种特殊测试用例编写成细粒度的部分会有所帮助。

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

此辩论是否有客观性,或者这是一个非常主观的电话吗?

1 个答案:

答案 0 :(得分:0)

这一切实际上取决于您如何看待它。有时,如果它们耦合得太紧密,则在单个单元测试中测试多个项目可能是有意义的,但在其他情况下,仅测试一个场景是有意义的。

单元测试应该非常明确,并且其目的应该从名称中明确。您正在使用的方法会将测试方法转变为 blackbox ,如果失败了,将很难跟踪实际出了什么问题。对于每个测试只有一个测试,如果一个测试失败,您可以轻松地了解错误的位置,但是对于您而言,则需要进行一些调试才能弄清楚这一点。这些是保持它们尽可能细化的一些优点