JUnit 测试私有变量?

2022-08-31 13:22:38

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

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


答案 1

首先,您现在处于一个糟糕的位置 - 为您最初未创建的代码编写测试并且没有任何更改 - 噩梦!和你的老板谈谈并解释,如果不让它“可测试”,就不可能测试代码。为了使代码可测试,您通常会进行一些重要的更改;

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

有时,私有字段暴露给公共访问,并带有一些获取器。我这样做,但尽量避免(在注释中标记,如“用于测试”)。

由于您没有可能更改代码,因此我认为没有可能(我的意思是真实的可能性,而不是像Reflectle hacks等)来检查私有变量。


答案 2

是的,您可以使用反射来访问私有变量。虽然不是一个好主意。

看看这个:

http://en.wikibooks.org/wiki/Java_Programming/Reflection/Accessing_Private_Features_with_Reflection