如何衡量单元测试与综合测试?

时间:2020-03-28 10:09:39

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

我正在研究论文,这与软件测试有关。编程语言是Java。 我有一个庞大的程序,包含超过450.000行代码(没有注释和空格)。还有许多JUnit测试。

我现在的问题是: 我如何知道测试是单元测试还是集成测试?

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

您有什么建议吗?您在软件测试方面有更多经验吗?我对此并不陌生,但对我而言,这种情况有点新奇而庞大……

提前谢谢! :)

2 个答案:

答案 0 :(得分:1)

Alexis完全在上面描述了单元测试和集成测试之间的区别,但是我感到有必要了解Java的特殊性以及如何编写和注意单元测试和集成测试之间的区别。

单元测试

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

模拟是一种功能强大的工具,可以为您的应用程序编写强大的测试,它鼓励开发人员编写 clean 精心设计的松耦合 >代码。

在整个Java项目中都会看到的一个常见示例是 Mockito Framework 。建议您阅读有关主题here的更多信息。

集成测试

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

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

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

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

总结

如果您的项目设计合理,则应按包将单元测试和集成测试隔离。从概念上讲,从体系结构上讲,这是使开发人员适应并适应的更好方法。它也完全在什么是集成测试和什么是单元测试之间划清界限。

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

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

单元测试不应具有数据库连接。 集成测试通常确实具有与测试数据库的连接。

答案 1 :(得分:0)

有很多与此相关的文章/书籍,只需在Google中进行一次查询,您就会发现更多内容,但总之:

单元测试是仅隔离测试最小单元(在Java中,最小单元是一种方法)的测试。

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

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

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

enter image description here

相关问题