java - JUnit 测试一个公共方法对非公共字段的影响
问题描述
包中有两个类 A 和 B。每个 A 对象都有一个 B 对象的引用。B 实例的状态应该只对 A 可见,这意味着所有 B 属性都具有包可见性。这是因为 A 类太复杂了——我把它一分为二(这样做在语义上是正确的)。
B 类有一个公共方法 duplicate() 执行一种深度复制(这意味着一些属性被递归地深度复制,而对于某些属性,只有引用被复制)。
问题是我需要测试重复方法:
- 我可以调用复制方法
- 由于包的可见性,我无法检查新创建对象的状态与原始对象的状态
- 我想避免创建 getter,因为 B 对象的状态不应该在包外可见
有没有办法使 B 中的属性仅对测试可见?
解决方案
由于包的可见性,我无法检查新创建对象的状态与原始对象的状态
那么您的测试设置就是错误的。
Java 单元测试中默认的最佳实践是
- 类 ProductionA 由名为 ProductionATest 的类进行测试......更重要的是
- ProductionA 和 ProductionATest 都在同一个包中
它们应该位于不同的 目录中,但存在于同一个包中!
因此,典型的 Maven 项目结构如下所示:
project-root / src / main / java / my / com / package
和
project-root / src / test / java / my / com / package
当您遵循这种做法时,您可以毫无问题地打包受保护的字段和方法(这正是每个人都以这种方式组织生产和测试类的原因)。
推荐阅读
- pyttsx - Pyttsx3 改变声音
- python - 数组循环内的字典
- android - 如何根据 Flutter 中的 ListView 选择显示某些小部件?
- tensorflow - 如何为 9170 个图像类创建标签数据集:路径目录
- android-studio - 在android studio ide的java文件夹中找不到活动和片段
- azure - 如何从 Azure 数据存储中恢复数据
- excel - 保存后关闭工作簿
- testing - 并行运行不同的测试(同时按顺序运行每个测试的 TestCase)
- r - 运行 rpart 后图形看起来不正确
- c# - 从字典 asp.net C# 绑定 GridView