JUnit 测试私有变量?

新手上路,请多包涵

我被分配了对一个我从未直接使用 JUnit 工作过的类进行单元测试的任务,并且严格禁止更改包中的代码。这通常不是问题,因为我们的大部分单元测试只是为了功能和输入/输出一致性,这可以通过运行例程并检查它们的返回值来简单地完成。

但是,偶尔需要检查类内部的一个私有变量,或者直接编辑一个私有变量来检查一些内部行为。有没有一种方法可以访问这些,无论是通过 JUnit 还是任何其他方式,以进行单元测试而不实际更改原始源包中的任何代码?如果不是,程序员如何在单元测试人员可能与编码人员不是同一个人的现实世界中处理这个问题?

原文由 donnyton 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 676
2 个回答

首先,您现在的处境很糟糕——您的任务是为您最初未创建且没有任何更改的代码编写测试——噩梦!与您的老板交谈并解释,如果不使其“可测试”就无法测试代码。为了使代码可测试,您通常会做一些重要的更改;

关于私有变量。你实际上永远不应该那样做。旨在测试私有变量是当前设计出现问题的第一个迹象。私有变量是实现的一部分,测试应该关注行为而不是实现细节。

有时,私有字段会通过一些吸气剂暴露给公共访问。我这样做,但尽量避免(在评论中标记,例如“用于测试”)。

由于您无法更改代码,因此我看不到检查私有变量的可能性(我的意思是真正的可能性,不像 Reflection hacks 等)。

原文由 Alexander Beletsky 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题