我应该为每个功能编写多少个集成测试(或场景)?

Posted

技术标签:

【中文标题】我应该为每个功能编写多少个集成测试(或场景)?【英文标题】:How many integration tests (or scenarios) should I write for each feature? 【发布时间】:2013-10-03 10:11:45 【问题描述】:

我现在正在查看一个同时具有单元测试和集成测试(使用 BDD)的项目。

集成测试为每个测试使用一个值文件。 (鉴于数据集的排列几乎是无限的。)我试图弄清楚这是否可行以及为什么。 (我对“测试”很陌生。)

我是否正确地说这些集成测试旨在测试数据是否正确流经组件,所以只有一组值是可以的?

并且应该在单元测试中测试数据的“排列”?所以我们知道各个单元可以处理不同的数据。

还是我完全错过了一个技巧?

【问题讨论】:

“可以只有一组值”,这取决于相关软件;不可能有一个普遍的答案。 【参考方案1】:

实际上,只测试一组数据是非常少的。可能这只是良好天气行为的一种情况。

我还建议添加恶劣天气行为。

关于排列:这很容易失控。因此,谷歌关于 MC/DC 覆盖:修改条件决策覆盖。它减少了所有可能性的最大数量,同时在该角度上仍然具有相同的覆盖范围。

【讨论】:

【参考方案2】:

在 BDD 中集成测试有两个目的:

您编写集成测试以测试应用程序行为的主要领域(强制您实施以使测试通过)。集成测试是一种规范,是开发人员与利益相关者之间以及开发人员与未来开发人员之间的一种沟通方式。

其次,集成测试按照您说的做:它们测试单元测试组件之间的每次交互是否正确。

如果您开发测试优先,您通常会发现测试驱动会激发您需要的所有集成测试,但如果您在测试之前编写一些代码,则可能需要返回并编写更多集成测试,这样您就有足够的集成覆盖。在这种情况下,您应该尝试对您编写该代码的业务原因进行逆向工程,并将其表达在对业务显示价值的集成测试中。

对于给定的集成测试,“一组值”是否足够取决于每组可能值的业务含义。例如,如果您正在处理检查,您可能需要三个集成测试:

支票金额低于可用资金且付款成功的支票 支票金额超过可用资金且账户透支的情况 检查在某种程度上无效并且出现错误。

您可以使用单元测试来驱动这些场景中的微小变化,例如不同的错误场景(一种是支票上的金额为零,一种是难以辨认,另一种是不是来自右岸),所有这些都会导致屏幕上显示错误。

P.S.:“集成测试”在不同的上下文中意味着不同的东西,但我使用了你的术语。我想“集成测试”是指类似于 Cucumber 场景的东西,强调它是一个规范,而不是测试如何工作的技术细节。

【讨论】:

以上是关于我应该为每个功能编写多少个集成测试(或场景)?的主要内容,如果未能解决你的问题,请参考以下文章

集成测试是不是应该绕过登录自然过程,以免多次重新测试相同的登录功能

Android Kotlin:如果当前活动或应用程序关闭,则进行集成测试

在 Rails 中,我应该在 capybara(或集成)测试中包含用户输入表单错误流吗?

如何使用 Typhoon 为集成测试注入虚假、存根或模拟依赖项

Java集成测试中的void方法

关于集成测试你了解多少?