对象是否可以调用overriden方法而不是原始方法

时间:2018-02-06 11:10:46

标签: java unit-testing

如果我们有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()并调用存根。

4 个答案:

答案 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()