对象不变性的单元测试

Sim*_*eon 11 java unit-testing immutability

我想确保给定的一组对象是不可变的.

我正在考虑以下方面的事情:

  1. 检查每个字段是否为私人决赛
  2. 检查课程是否是最终的
  3. 检查可变成员

所以我想我的问题是:可能吗?

我可以递归地检查一个类的每个成员是否都有它的字段private final,但这还不够,因为一个类可以有一个名为e的方法getHaha(param),它将给定的param添加到一个数组中.

那么有一个很好的方法来检查一个对象是不可变的还是甚至可能?

谢谢,

Gru*_*eck 5

您可能想要查看此项目:

可变性检测器

该库试图分析特定类的字节码,以发现它是否是不可变的.它可以测试在单元测试这种情况下,作为提供视频证明了这里.它肯定不是完美的(String字段将被认为是可变的,并且您的数组示例处理不当)但它比FindBugs提供的更复杂(即只检查每个字段是否为final).

免责声明:我写的;-)


Pet*_*rey 3

如果您生成数据模型及其所有代码,则可以确保您创建的可能的数据值对象是不可变的,以满足您的需求。

您遇到的问题是存在不同形式的不变性。甚至String会让你的测试失败字符串、日期、方法是不可变的吗? 您可以通过这种方式证明类是严格不可变的,但生成数据模型可能会更好。