【问题标题】:How to measure a unittest vs. intergrationtest? [duplicate]如何衡量单元测试与集成测试? [复制]
【发布时间】:2020-07-09 00:05:02
【问题描述】:

我的论文是关于软件测试的。编程语言是Java。 我有一个包含超过 450.000 行代码的庞大程序(没有 cmets 和空格)。还有许多 JUnit 测试。

我现在的问题是: 我怎样才能知道测试是单元测试还是集成测试?

我的想法: 我可以使用测试的执行时间吗?或者我可以测量CPU的性能吗?

你有什么建议吗?你有更多的软件测试经验吗?我对此并不陌生,但这个案例对我来说有点新和巨大......

提前感谢您! :)

【问题讨论】:

  • 这个问题之前在 SO 上已经回答过好几次了。对于正在撰写有关软件测试的论文的人来说,我希望能够在提出此类问题之前进行一些研究。

标签: java unit-testing testing junit integration-testing


【解决方案1】:

Alexis 在上面完整地描述了单元测试和集成测试之间的区别,但我觉得有必要加入 Java 的特殊性以及如何编写和注意单元测试和集成测试之间的区别。

单元测试

通常对于单元测试,模拟框架用于模拟特定类和特定方法的某些依赖项。由于使用单元测试,我们只想测试单个代码单元(类方法),我们不想担心该方法与之通信的其他类,因此我们模拟那些外部依赖项并经常 验证 对这些外部依赖项的方法调用是在没有实际运行外部方法的情况下执行的。

Mocking 是为您的应用程序编写强大测试的强大工具,它鼓励开发人员编写干净精心设计松散耦合 代码。

您将在整个 java 项目中看到的一个常见示例是 Mockito 框架。我建议阅读更多关于该主题的内容here

集成测试

“为暴露接口中的缺陷以及集成组件或系统之间的交互中的缺陷而执行的测试。”

在java术语中,这通常是指类之间的交互。 A 类如何调用 B 类并确保它们之间的链接在数据传输、错误处理和控制流方面正常工作。集成测试通常不使用模拟框架,但在实践中可以。通常,您希望在不模拟依赖链接的情况下全面测试组件交互。但是,这取决于您在应用程序设计方面的需求。有关这方面的更多信息可以找到here

通常在集成测试中,数据库会针对其 CRUD(创建-读取-更新-删除)操作进行测试。单元测试与数据库没有连接。这是因为需要数据库连接的测试本质上会产生副作用。测试代码的“单个单元”的概念存在泄漏。因此,通常从集成测试开始对数据库进行测试。

要求此数据库连接通常会导致集成测试的运行速度比单元测试慢得多。这是因为需要为测试类的每组事务汇总数据库,并且通常如果您使用的是 IOC 容器(如 Spring),那么开销会更大到时间就会存在。通常,对于集成测试,我们使用测试数据库,而不是真正的数据库,并且通常在内存中。

总结

如果您的项目设计良好,则单元测试和集成测试应该按包隔离。它在概念上是有意义的,在架构上它是开发人员适应和感到舒适的更好方法。它还完全划清了什么是集成测试和什么是单元测试之间的界限。

单元测试非常快,应该是应用程序的基础测试套件。 在大多数情况下,由于需要数据库连接,集成测试可能会很慢,但可以涵盖比单元测试更多的变体。

单元测试通常使用模拟框架来模拟外部依赖项。 集成测试通常使用真正的依赖对象进行测试。

单元测试不应有数据库连接。 集成测试通常会连接到测试数据库。

【讨论】:

  • 感谢您的帮助。我知道这是测试之间的区别,但是您的详细总结将我(我希望如此)推向了正确的方向。因为我想知道是否有任何工具或东西向我展示:这是一个集成测试。这是一个单元测试。但正如你所说,在我的项目中,测试只放在一个文件夹中:test.所以现在我需要检查每个测试的字符,比如数据库连接。
【解决方案2】:

有大量关于此的文章/书籍,只需在 Google 中进行一次查询,您就会找到更多信息,但简而言之:

单元测试是仅单独测试最小单元(在 Java 中最小单元是方法)的测试。

集成测试测试依赖单元之间的通信/协作(在 Java 中,您可能会测试某些类是否正确通信)。

没有将您的测试声明为Units TestsIntegration Tests 的特定提示或注释,您必须深入研究并弄清楚。

您可以非常轻松地测量测试的执行时间。有很多工具可以做到这一点,但 Intellij(这是 Java 最常见的 IDE)有一个内置功能。图中可以看到这个IDE打印的测试套件的执行时间。

【讨论】:

  • 谢谢。这是我现在的第一步。所以时间是一个有效的衡量标准。我还查看和谷歌有关此测试的一些测量。我想知道是否有更多或一些我应该知道的隐藏知识...... :)
猜你喜欢
  • 1970-01-01
  • 2016-05-05
  • 2010-10-23
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多