如果我们有2个这样的课程:
public class A {
public static int m=10;
public int b(){ m++; return m;}
public int fun() {
return b();
}
}
public class Testfun() extends A {
@Override
public int b() {return 1;}
public void test(){
A a = new A();
assertEquals(1,a.fun());
}
}
有没有办法让A类中的方法fun()
调用覆盖b()
而不是超级b()
?
这个想法是:
我想测试方法fun()
并执行存根b()
。所以我不希望该方法调用原始b()
并调用存根。
答案 0 :(得分:3)
有没有办法让方法中的方法fun()调用overriden b()而不是它的super b()?
没办法。您拥有的实例的类型为A
,并且会调用来自A
的方法。周期。
答案 1 :(得分:1)
不,你不能打电话。你拥有的实例是A类,A的方法被调用。
答案 2 :(得分:0)
不,这是不可能的,因为对象不知道有多少孩子或者其中有任何一个。当你想在类中测试某些内容并希望对其进行存根时,它的信号需要使它成为类的依赖关系:
git commit
git checkout master
git merge unit-testing
在这个例子中,我们将B作为A类的依赖,并且能够将B从运行时的期望实现更改为在测试中测试虚拟。当您需要测试B本身时,您需要单独的类来测试B.请参阅https://en.wikipedia.org/wiki/Strategy_pattern
答案 3 :(得分:0)
谢谢大家,这真的对我有所帮助! 我的错误就在这里
A a = new A();
应该是:
A a = new Testfun();
因此将调用覆盖b()
。