-1
package com.foo;
public abstract class A {
    private functionA() {
    }
  static class B {
     A a;
     public functionB() {
       a.functionA();
     }
}

因此,我需要从不同的包中测试 functionA() 但我不能对 A 类或作为约束的包 com.foo 进行任何更改。我正在尝试进行静态导入,以便我可以从该包外部访问静态嵌套类 B,但它给了我“找不到符号,符号:静态 B,A 类”的错误我已经尝试导入静态 com.foo。 A.* 也是,但在测试类中写入 B.functionB() 时,我收到错误“在测试类中找不到符号 B”。请在下面找到 Test 类语法:

package com.foo.test;
import static com.foo.A.B;
public class Test {
   B.functionB(); 
}

有没有其他方法可以从包外部测试 functionA() 或 functionB() ?

4

1 回答 1

0

您不能从静态内部类调用外部类的实例方法。

有两种方法可以解决这个问题:

  1. 与其直接测试私有函数,不如调用一个调用私有函数的公共方法并分析副作用。事实上,归根结底,坚持使用公共方法更适合黑盒测试。
  2. 您可以将测试类放在同一个包中,但放在不同的源文件夹中。这就是许多 IDE 默认处理它的方式(主代码使用 src/main/java,单元测试使用 src/test/java)。请注意,您的 functionA() 方法必须是包保护的,而不是私有的(即删除 private 关键字)。

就是说,如果您对当前的方式一心一意,您可以将 B 和 functionB 设为 public,并将 static 修饰符添加到 functionB,只要 functionB 可以访问 A 的实例,它就应该可以工作。当然,这个有点违背了将 functionA 设为私有的意义。

于 2021-08-11T18:35:00.730 回答