测试使用私有静态对象列表的方法 class

Testing a method which uses an List of objects of a private static class

我有方法要测试。它的输入参数是 private static class

的对象列表
Class Invoker{

   public String method1(String inp){

   ArrayList<InnerClass> params = new ArrayList<>();
   params.add(new InnerClass("some value"));
   String op = method2(params);
   //other implementation
  }

   public String method2(ArrayList<InnerClass> list){

     //method implementation
  }

   private static class InnerClass {
      private String var1;

          public InnerClass(String str){
          super();
          this.str = str;
         }
   }
}

现在,我想为方法'method1'写一个测试用例。我面临的问题是,在测试时,我无法在测试 class.

中创建 ArrayList

你走错地方了。

将内部 class 设置为私有向您的读者(顺便说一句,编译器)传达这个内部 class 旨在 在外部包围 class。故事结束。

因此,在 public 方法的签名中使用 class 名称根本没有意义。

当然,理论上你可以使用 reflection 来解决这个问题(直到可能 Java 9 个模块妨碍你),但如前所述:这样做是浪费时间。

如果您需要使用 class 以外的东西,请不要将它们设为私有。因此,请考虑将它们包保护起来。然后同一包内的用户可以访问,因此单元测试应该位于同一包内)。