java - 如何更改旧单元测试的私有(private)抽象父字段

标签 java unit-testing reflection parent-child legacy

如果我有:

 public abstract class A {
      private Object target; // <- **IMPORTANT**

      protected Blah blah    // ... Not directly relevant to the question, 
      protected Blah blah2   //     they are just a potential reason to extend 
                             //     test class ...?

      public int func (){
          int hello = Integer.parseInt(target.Fields.want2Change);
          return hello;
      }     
  }

我想测试A类。 因为它是抽象的,所以我用 ATest 类来扩展它。 还有其他字段,但它们受到保护,这是合理的。

我的问题是来自子类,我如何访问家长私有(private)字段,例如目标

我混合使用了模拟(Mockito)和反射。

我也尝试过只使用反射而不扩展类。

最佳答案

这并不能直接回答您的问题,但是否可以通过某种方式行使父类的公共(public) api 来测试私有(private)字段状态?

如果你能做到这一点,那么就不需要反射(reflection),而且从长远来看,这可能更容易维护。

如果没有,那么您必须扩展该类并使用 relection 来获取私有(private)属性(property)的句柄。

查看此主题:

Access to private inherited fields via reflection in Java

关于java - 如何更改旧单元测试的私有(private)抽象父字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024369/

相关文章:

java - 使用 Transformer 格式化输出 XML

c# - 如何编写 MassTransitStateMachine 单元测试?

python - MagicMock 对象可以迭代吗?

PHPUnit 不会自动检测目录中的文件

java - 有没有办法使用类变量创建泛型实例?

java - 我如何从 ClassRunner 中获取 JUnit 正在运行测试用例的测试类实例?

java - 如何知道apache tomcat 7.0是否启用了trace功能?

java - 尝试将 java 隐式转换为 scala 集合时出现 NoSuchMethodError

java - 使用 for 循环初始化二维 JPanel 数组

java - 分析方法内部的变量。 JavaParser/ANTLR 或其他?