首页 > 解决方案 > JUnit 测试一个公共方法对非公共字段的影响

问题描述

包中有两个类 A 和 B。每个 A 对象都有一个 B 对象的引用。B 实例的状态应该只对 A 可见,这意味着所有 B 属性都具有包可见性。这是因为 A 类太复杂了——我把它一分为二(这样做在语义上是正确的)。

B 类有一个公共方法 duplicate() 执行一种深度复制(这意味着一些属性被递归地深度复制,而对于某些属性,只有引用被复制)。

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

有没有办法使 B 中的属性仅对测试可见?

标签: javajunit

解决方案


由于包的可见性,我无法检查新创建对象的状态与原始对象的状态

那么您的测试设置就是错误的。

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

  • 类 ProductionA 由名为 ProductionATest 的类进行测试......更重要的是
  • ProductionA 和 ProductionATest 都在同一个包中

它们应该位于不同的 目录中,但存在于同一个包中!

因此,典型的 Maven 项目结构如下所示:

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

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

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


推荐阅读