java - 在测试类中使用可访问的私有(private)字段运行测试

标签 java unit-testing reflection

我有一些带有常量的类要测试:

public class SomeClass {
     private static final String SOME_CONST = "blabla";

我必须在测试中使用它,所以我(使用 Spring ReflectionUtils 和 java.lang 原生库)制作如下:

findField(SomeClass.class, "SOME_CONST").setAccessible(true);

makeAccessible(findField(SomeClass.class, "SOME_CONST"));

运行测试

@Test
public void someTest() throws Exception {
    String s = SomeClass.SOME_CONST; 

我看到我的 Intellij Idea 停止运行,并出现与尝试访问私有(private)字段相关的错误。假设我应该使用某种@SuppressWarnings或者如何更好地解决这样的问题?

最佳答案

测试私有(private)方法/字段通常是糟糕设计的标志。 如果您不介意展示它,请将其设置为 public 或放置一个 getter 来检索该变量,因为它是最终的,所以您不应该遇到任何麻烦,除非它具有敏感数据或它是一个可变类(不是 String 的情况) 。 或者使用您的方法,执行

Field field = TargetClass.getDeclaredField(fieldName);
field.setAccessible(true);
String someConst = (String) field.get(new SomeClass());

正在关注this hint

关于java - 在测试类中使用可访问的私有(private)字段运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35220417/

相关文章:

java - 在单个后台线程定期修改 map 的同时读取 map

java - Thymeleaf - 输入动态字符串列表

unit-testing ->> 和 1* 在这个 groovy 语句中是什么意思?

c# - 通过反射获取对象

java - Java中的反射如何影响应用程序的性能以及哪些场景可以使用反射?

java - 如何使用反射获取注释类名称、属性值

java - 使用 freemarker 基于模型数据的行突出显示

java - 在 recyclerview 内点击获取数据

c++ - 使用流将对象转换为字符串

c# - 如何使用 Jenkins 安排 C# 单元测试?