濮阳团购网站建设,免费建立公司网站,医疗云网站建设,建设网站费用会计分录测试替身Test Doubles的5类型(Mockito)
我们有一个名为 BankAccount 的类。 数据库用于存储和检索银行帐户信息。 我们想测试 BankAccount 中的逻辑#xff0c;而不必担心它使用的底层数据库.由此类实现——它将 SQL 查询发送到数据库并返回其中包含的值。
测试替身Test Dou…测试替身Test Doubles的5类型(Mockito)
我们有一个名为 BankAccount 的类。 数据库用于存储和检索银行帐户信息。 我们想测试 BankAccount 中的逻辑而不必担心它使用的底层数据库.由此类实现——它将 SQL 查询发送到数据库并返回其中包含的值。
测试替身Test Doubles 测试替身是“替代”某些原始类的类允许测试避免使用原始类代替时所需的一些复杂性。测试替身有点像特技替身——我们不使用真正的演员而是使用另一个 看起来像但让所有困难的事情看起来很容易
测试替身的类型 1 Dummies 2 Stubs 3 Fakes 4 Mocks 5 Spies
Dummies Dummies 是代替实物的物体 然而测试从来没有使用伪它的目的只是满足编译器的要求。 我们假设BankAccountDatabaseConnection是一个Java接口我们可以用不同的方式实现它进行测试。但是实际类的方法可以很容易地被重写以获得相同的效果。 数据库本身对此测验并不重要,所以我们只需要一个假dummy来编译测试。 Stubs Stubs是覆盖原始类的某些方法的对象以便可以测试其他类/方法。 Fakes Fakes提供了真实对象的伪实现。这里是数据库功能的“内存中”实现。 请注意fakes的缺点——本质上我们正在实现更多需要测试的功能。 Mocks Mock扩展了Stub的概念——它们允许您控制方法返回的值但也可以确认方法是用正确的值作为参数调用的。 除非我们使用假的并为假的写更多的测试否则无法确定进入数据库以设置银行账户余额的值是否正确。 Mock: 明确验证是否指示数据库将账号为1000的余额金额设置为200英镑。
Test using mock: Spies Spies类似于mock但没有Stub方法返回预定值的方法。也就是说它们只做方法调用的日志记录和检查部分。它们对于检查单元和外部组件之间的接口很有用。有时它们甚至被用作集成测试的一部分。 例如它们可以用于监视方法并检查是否生成了正确的SQL。或者在调用服务发送电子邮件之前电子邮件的内容是预期的。
小心Doubles 请注意有多少示例涉及到关于类被加倍的许多实现细节。特别是 •Fakes需要自己的测试因为他们涉及更多实施 •Mocks记录有关单个方法调用的详细信息使它们容易变得脆弱。 因此请小心使用Doubles并且仅在必要时使用。 保持事情尽可能真实往往是最好的方法同时避免双重性。
Mockito 每次你想测试一些东西时写一个新的测试Doubles可能会很痛苦很快。 Mockito是生成用于JUnit的mock的有用框架。 由于Mocks是Stubs和Spices而Stubs更专业的Dummies版本Mockito可以生成除Fake之外的所有类型的Doubles。
Mock example with Mockito
Test using manually written mock: Manually- written mock class: Test using virtual mock: 在 Java 中虚拟模拟测试是指在单元测试期间使用模拟框架来模拟依赖项或外部组件的行为的做法。 模拟是一种用于隔离被测试代码的技术它通过用可以控制和验证的虚假实现替换真实的依赖关系。
以下是如何在 Java 中进行虚拟模拟测试的一般概述 选择模拟框架Java 有几种流行的模拟框架例如 Mockito、PowerMock 和 EasyMock。 选择一个适合您需要的并将其作为依赖项包含在您的项目中。 Identify the Dependencies确定需要模拟的外部依赖。 这些依赖项通常是您的代码所依赖的其他类、接口或外部服务。 创建模拟对象使用模拟框架创建模拟依赖项行为的模拟对象。 这些模拟对象将在测试期间替换真实的实现。 定义模拟行为指定模拟对象的期望行为。 您可以将它们配置为返回特定值、模拟异常或在调用某些方法时执行其他操作。 将模拟注入到测试中在您的测试代码中将模拟对象注入到被测试的类或方法中。 这通常是通过构造函数注入、setter 注入或使用像 Spring 这样的依赖注入框架来完成的。 编写测试用例编写测试用例以执行被测代码的功能。 当代码调用模拟依赖项上的方法时它们将根据模拟对象中定义的行为做出响应。 验证交互执行被测试的代码后您可以使用模拟框架的验证功能来断言特定方法在模拟对象上被调用并使用预期参数。 运行测试使用您喜欢的测试框架例如 JUnit 或 TestNG执行测试用例。 测试框架将运行测试并报告任何失败或错误。
通过使用虚拟模拟测试您可以在不依赖实际依赖项的情况下有效地隔离和测试各个代码单元从而使测试过程更加集中和高效。 Mocking 允许您模拟不同的场景、边缘情况和错误条件以确保您的代码在各种情况下都能正确运行。 使用mock生成mock对象。我们从来没有也不需要看到任何实际的代码——因为它无论如何都不存在 为mock生成“Stubbed”方法
Fake Turned Into a Mock Test using manually written fake: Manually written fake class: 它只是为了测试但我们也需要测试它 我们可以改用Mock。 此代码类似于Mock的最后一个示例。
Dummy Example with Mockito Test using manually written dummy: Manually written dummy class: Test using virtual mock (which is a dummy in this case): 生成模拟对象。 由于我们不去stub或验证任何方法因此它实际上是一个dummy
Stub Example with Mockito Test using manually written stub: Manually written stub class: 生成模拟对象并“stub”一个方法。 由于我们不去验证任何方法它实际上是一个Stub Mockito——总结 Mockito 可以省掉很多手动写 double 的工作。 Mockito 可以做的比我们在这里介绍的更多请参阅 https://site.mockito.org/ Double会导致脆弱的测试。 始终考虑集成测试是否更合适。