don*_*ton 64 java variables junit unit-testing private
我被分配了一个单元测试任务的任务,我从未直接用JUnit工作,并且严格禁止更改包中的代码.这通常没有问题,因为我们的大多数单元测试只是为了功能和输入/输出的一致性,这可以通过运行例程并检查它们的返回值来完成.
但是,偶尔需要检查类中的私有变量,或者直接编辑私有变量以检查某些内部行为.有没有办法获得访问这些,无论是通过JUnit或任何其他方式,为了单元测试而不实际更改原始源包中的任何代码?如果没有,那么程序员如何在现实世界中处理这个问题,而单元测试人员可能与编码器不同?
Ale*_*sky 51
首先,你现在处于一个不好的位置 - 负责为你最初没有创建的代码编写测试,没有任何改变 - 噩梦!与老板交谈并解释,如果不使其"可测试",就无法测试代码.为了使代码可测试,您通常会做一些重要的更改;
关于私人变量.你实际上永远不应该这样做.旨在测试私有变量是当前设计出现问题的第一个迹象.私有变量是实现的一部分,测试应该关注行为而不是实现细节.
有时候,私人领域会受到一些吸气者的公共访问.我这样做,但尽量避免(在评论中标记,如'用于测试').
由于你没有可能改变代码,我没有看到检查私有变量的可能性(我的意思是真实的可能性,而不是像反射黑客等).
Alf*_*rio 29
是的,你可以使用反射来访问私有变量.尽管不是个好主意.
看一下这个:
http://en.wikibooks.org/wiki/Java_Programming/Reflection/Accessing_Private_Features_with_Reflection
bpg*_*rgo 17
反思 如下:
public class PrivateObject {
private String privateString = null;
public PrivateObject(String privateString) {
this.privateString = privateString;
}
}
PrivateObject privateObject = new PrivateObject("The Private Value");
Field privateStringField = PrivateObject.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86968 次 |
| 最近记录: |