Java 集成测试到底是什么?与单元测试相比
我开始在我的项目中使用单元测试,并且正在编写在方法/功能级别进行测试的测试 我理解这一点,这是有道理的 但是,什么是集成测试?从我所读到的内容来看,它将测试范围向上移动,以测试应用程序的更大功能 这意味着我要编写一个新的测试套件来测试更大的东西,比如(在电子商务站点上)结帐功能、用户登录功能、购物篮功能。所以这里我要写3个集成测试 这是正确的吗?如果不是,有人能解释一下这是什么意思吗Java 集成测试到底是什么?与单元测试相比,java,php,unit-testing,testing,integration-testing,Java,Php,Unit Testing,Testing,Integration Testing,我开始在我的项目中使用单元测试,并且正在编写在方法/功能级别进行测试的测试 我理解这一点,这是有道理的 但是,什么是集成测试?从我所读到的内容来看,它将测试范围向上移动,以测试应用程序的更大功能 这意味着我要编写一个新的测试套件来测试更大的东西,比如(在电子商务站点上)结帐功能、用户登录功能、购物篮功能。所以这里我要写3个集成测试 这是正确的吗?如果不是,有人能解释一下这是什么意思吗 此外,集成测试是否涉及ui(此处为web应用程序上下文),是否会使用selenium之类的工具来实现自动化。或者
此外,集成测试是否涉及ui(此处为web应用程序上下文),是否会使用selenium之类的工具来实现自动化。或者,集成测试仍然是在代码级别上进行的,但将不同的类和代码区域捆绑在一起。考虑这样一种方法
PerformPayment(双倍金额,PaymentService)
单元测试是为服务
参数创建模拟的测试
集成测试是一种使用实际外部服务的测试,以便测试该服务是否正确响应您的输入数据。据我所知,selenium测试应该在另一个测试套件中。这些测试本质上是最脆弱的测试,即使你写得正确。在这里,您可以使用Specflow或其他类型的示例规范框架。也许您可以将这些测试称为验收测试。这些也是为开发人员和业务专家准备的。
集成或模块测试通常不使用UI。集成测试练习一些协同工作的类。这些测试的级别比selenium测试低,并且更易于维护。这些测试只供开发人员使用。这里有几个好的单元测试需要满足的约束条件。满足这些约束还需要良好的可测试代码
这些约束通常不适用于集成测试。单元测试是在一个类或一段代码中测试业务逻辑。例如,如果您正在测试方法的某个特定部分是否应该调用存储库,那么您的单元测试将进行检查,以确保调用存储库的接口的方法被调用的次数与您预期的次数相同,否则测试将失败
另一方面,集成测试是测试实际的服务或存储库(数据库)行为是否正确。它是根据您传入的数据检查您是否检索到了预期的结果。这与单元测试相关联,以便您知道应该检索哪些数据以及它对这些数据的作用。单元测试是测试代码在实际类中的测试。此类的另一个依赖项被模拟或忽略,因为重点是测试类内部的代码 集成测试是涉及目标应用程序的磁盘访问、应用程序服务和/或框架的测试。集成测试与另一个外部服务隔离运行 我会举一个例子。您有一个Spring应用程序,并且进行了大量的单元测试,以确保业务逻辑正常工作。完美的但您必须保证哪种测试:
- 您的应用程序服务可以启动
- 您的数据库实体已正确映射
- 您已经按照预期完成了所有必要的注释
- 您的
工作正常过滤器
- 您的API正在接受某种数据
- 您的主要功能是在基本场景中工作
- 您的数据库查询正在按预期工作
- 等等
Maven failsafe插件
,该插件执行名称以IT结尾的测试类(默认情况下)。示例:UserIT.java
关于集成测试意味着什么的困惑
有些人将“集成测试”理解为一种测试,涉及到与当前系统使用的其他外部系统的“集成”。此类测试只能在所有系统都已启动并运行的环境中进行。没有虚假,没有嘲弄
这可能只是一个命名问题,但我们缺少满足上述项目必要性的测试(我理解为集成测试)。相反,我们正在从单元测试的定义(仅测试类)跳到“集成”测试(整个真实系统)。那么,如果不是集成测试,中间是什么?
你可以阅读马丁·福勒关于这一困惑的更多内容。他将“集成测试”一词分为两种含义:“广义”和“狭义”集成测试:
窄集成测试
- 在我的服务中,只练习与用户对话的那部分代码 单独服务
- 使用这些服务的测试加倍,或者 进程或远程
- 因此,由许多范围狭窄的测试组成,通常没有 范围大于单元测试(通常与相同的测试一起运行