package com.foo;
public abstract class A {
private functionA() {
}
static class B {
A a;
public functionB() {
a.functionA();
}
}
所以,我需要从不同的包中测试functionA(),但我不能在类a或包com中进行任何更改。这就是约束条件。我试图做一个静态导入,这样我就可以从这个包外部访问静态嵌套类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() ?
不能从静态内部类调用外部类的实例方法。
有两种方法:
- 与其直接测试私有函数,不如调用调用私有函数的公共方法并分析其副作用。事实上,在一天结束时,坚持使用公共方法对黑盒测试更好。
- 你可以把你的测试类放在同一个包中,但是放在不同的源文件夹中。这就是许多ide默认处理它的方式(src/main/java用于主代码,src/test/java用于单元测试)。注意,你的functionA()方法必须是包保护的,而不是私有的(即删除private关键字)。
也就是说,如果您坚持当前的方式,您可以将B和functionB设为公共,并向functionB添加静态修饰符,只要functionB能够访问a的实例,它就应该工作。当然,这有点违背了将functionA设为私有的目的。