JUnit如何模拟超类的属性

JUnit如何模拟超类的属性,junit,Junit,我想测试子类B中的方法外接程序,但如何模拟超类a中的属性a、B。我建议您对这些字段使用getters和setters 无论如何,显示您在哪里设置的代码,并通过反射获取值 下面是代码的反射部分的外观: class A { int a; int b; } class B extends A { public int add(){ return a+b; } } 这将分别打印5和10。要模拟它们吗?您不能使用setter吗?我

我想测试子类B中的方法外接程序,但如何模拟超类a中的属性a、B。

我建议您对这些字段使用
getters
setters

无论如何,显示您在哪里设置的代码,并通过反射获取值

下面是代码的反射部分的外观:

class A {

     int a;
     int b;

 }



class B extends A {

     public int add(){
         return a+b;
     }
 }

这将分别打印
5
10

要模拟它们吗?您不能使用setter吗?我现在正在使用反射来设置属性的值。但子类只接受默认值。我认为这在PowerMock中是可能的。。。您使用反射有什么原因吗?你确定这是最好的选择吗?另外,为什么要给成员a和b默认访问权限?我不是说他们不应该,只是想想你的设计。。。大多数情况下,当我需要使用PowerMock时,这是因为我的设计中有一些东西关闭了……实际上a和b是受保护的访问。对于这些属性,我们不使用getter和setter。这就是为什么我必须使用反射。非常感谢你的回答。a和b没有受保护的关键字。。。所以使用默认的访问修饰符。。。我将研究powermock,这将是一个起点。谢谢你的回答。我就是这么做的。我已经为a和b设置了值,但子类只接受默认值。我想用新值测试add()方法。
  public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
  {
    B bObj = new B();
    Field aField = A.class.getDeclaredField("a");
    Field bField = A.class.getDeclaredField("b");
    aField.set(bObj, 5);
    bField.set(bObj, 10);

    // alternatively, if you had getters, you can see the values using them
    System.out.println(aField.getInt(bObj));
    System.out.println(bField.getInt(bObj));
  }