java - 如何确保单元测试在这种情况下保持正确?

标签 java unit-testing integration-testing

我真的不知道如何简洁地解释我的情况,所以我必须描述一下场景。

我有一个进程 A,它接受输入 X 并产生输出 Y。我有一个单独的进程 B,它接受输入 Y(来自进程 A)并产生输出 Z。

流程 A 和 B 都很复杂,因此可以从单元测试中受益。进程 A 和 B 也可能会发生变化,因此“中间”格式 Y 也会发生变化。

如果我只是对输入 Y 的 B 进行单元测试,那么如果流程 A 发生变化,我如何确保它们保持相关性和正确性?例如,进程 A 将输入“foo”转换为“bar”。 B 的单元测试将“bar”作为输入并将其转换为“overflow”。如果进程 A 发生变化,现在将“foo”变成“fish”,那么我对 B 的单元测试仍然会通过,但它们的值(value)值得怀疑,因为它们不再测试预期的输入。

解决这种情况的最佳做法是什么?这种情况有名字吗?

此外(为了增加复杂性),进程 B 是 Java,但进程 A 是 Visual Basic。

我知道“超越”单元测试并执行集成测试将是确保输入 X 可以成为输出 Z 的一种方法,但由于我们对流程 B 进行了大量测试,我们如何确保这些测试保持相关性? (而且当一个是 Visual Basic 而另一个是 Java 时,这并不容易)。

最佳答案

我想您已经知道答案:集成(端到端)测试。如果设置不可行,您能做的最好的事情就是分别测试 X/Y 和 Y/Z,并确保只要其中一个发生故障(由于代码更改),您就更新另一个以保持测试数据的相关性。

在我看来,投资建立适当的集成测试套件要安全得多,特别是如果端到端流程符合用户的期望。最后,他们不会关心你的任何好的单元测试,他们只是想看到你的软件针对他们的特定输入执行特定的操作。因此,编写端到端行为测试更加面向 future ,并且可以很好地记录您的软件的功能。

关于java - 如何确保单元测试在这种情况下保持正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28684143/

相关文章:

java - 如何实例化(在方法内)实现相同接口(interface)的不同类?

unit-testing - Chutzpah 和 Jasmine typescript 单元测试

python - 使用 ctrl c 退出程序

android-maven-plugin、仪器测试和testSize

spring-mvc - Spring MVC Controller 的集成测试

java - 在执行 jndi 查找时,如何找出我应该使用的 SerialContextProvider?

Java 用排除项替换所有正则表达式

java - 访问其他类的 swing 组件

node.js - 用 Jest 测试文件系统?

testing - 第一次编译 flutter_driver 时出错