JUnit测试公共方法对非公共字段的影响

时间:2019-06-18 08:11:50

标签: java junit

一个包中有两个类A和B。每个A对象都有一个B对象的引用。 B实例的状态仅对A可见,这意味着所有B属性都具有程序包可见性。这是由于A类太复杂了-我将其分为两部分(这样做在语义上是正确的)。

B类具有一个执行深度复制的公共方法plicate()(这意味着某些属性将以递归方式深度复制,而对于某些属性,仅复制引用)。

问题是我需要测试重复方法:

  • 我可以调用重复方法
  • 由于软件包的可见性,我无法将新创建的对象的状态与原始对象的状态进行比较
  • 我想避免创建吸气剂,因为不应在包装外部看到B对象的状态

是否有一种方法可以使B中的属性仅用于测试可见?

1 个答案:

答案 0 :(得分:4)

  

由于程序包的可见性,我无法将新创建的对象的状态与原始对象的状态进行比较

然后,您的测试设置完全错误。

这是Java单元测试中的默认最佳实践

  • ProductionA类由名为ProductionATest的类进行测试,而更重要的是
  • ProductionA和ProductionATest都位于相同包中

它们应该驻留在不同 目录中,但存在于 same 包中!

因此,典型的maven项目结构如下:

project-root / src / main / java / my / com / package

project-root / src / test / java / my / com / package

当您遵循这种做法时,便可以轻松打包受保护的字段和方法(这就是每个人都以这种方式组织生产和测试类的原因)。