软件测试:检查RAM中的对象数据在软件更改后是否相同

Software Testing: checking Object Data in RAM is the same after Software changes

我正在为软件编写测试。测试的目的是当对软件源进行更改时不会发生副作用。

软件从文件中读取数据并将其存储在RAM中。

我编写了一个 JUnit 测试,将对象字段值(基本类型和 Strings)存储到 Vector 中。这些字段值来自测试环境中明确定义的代表性数据集。然后,我反序列化上次测试 运行 中的 Vector,并将其与当前 Vector 进行比较。然后我断言:

assertArrayEquals(expectedVector.toArray(),actualVector.toArray());

像这样,我很快就能看到数据在 RAM 中的存储方式是否不同。

这是一个有用的测试吗? 是否有更简单的方法来测试对象数据是否以相同的方式加载? 这是常见的做法还是这些类型的测试以不同的方式完成?

这是测试 "legacy code" 时的常见做法。它被称为 golden master

如果您想在代码周围建立一个安全网以检测现有行为的变化,那完全没问题。这是一种集成测试形式,这意味着它会同时执行多个组件。这也意味着该测试具有集成测试的常见缺点(比单元测试慢,因为您遇到了文件系统、网络等真正的依赖项)。

虽然提供了基本的回归检查,但这种测试不会告诉您问题到底出在哪里。围绕代码放置集成测试后,您可以考虑围绕各个组件放置更细粒度的单元测试,这将使您更容易找到代码中的问题。

首先 "pinning" 具有集成测试的代码库,然后安全地重构和引入单元测试的方法由 J.B. Rainsberger 详细讨论。

如果您只想要这种基本的回归检查而不关心单元测试的好处,那您就是 "golden"!