2013-01-23 54 views
2

是否可以制作一个超类方法的模拟? (未被覆盖)如何制作一个超级方法的模拟(带返回)

public class FooBarTest { 

    @Test 
    public void test() { 
     Bar bar = Mockito.spy(new Bar()); 
     Mockito.doReturn("Mock!").when((Foo) bar).test(); 

     String actual = bar.test(); // returns only "Mock!" 
     assertEquals("Mock! Bar!", actual); 
    } 

    public static class Foo { 
     public String test(){ 
      return "Foo!"; 
     } 
    } 

    public static class Bar extends Foo { 
     @Override 
     public String test(){ 
      return super.test()+" Bar!"; 
     } 
    } 
} 

关闭:如何在此突出显示代码?

+0

另外,与Java标签的问题,它会自动做到这一点。 –

+3

lmgtfy:[Mockito如何嘲笑只有超类的方法调用](http://stackoverflow.com/questions/3467801/mockito-how-to-mock-only-the-call-of-a-method -of最超类) – atomman

回答

1

这里是一个解决方案,使用JMockit嘲讽API:

public class FooBarTest 
{ 
    @Test 
    public void test() 
    { 
     final Bar bar = new Bar(); 
     new NonStrictExpectations(Foo.class) {{ bar.test(); result = "Mock!"; }}; 

     String actual = bar.test(); 
     assertEquals("Mock! Bar!", actual); 
    } 

    public static class Foo { 
     public String test() { return "Foo!"; } 
    } 

    public static class Bar extends Foo { 
     @Override 
     public String test() { return super.test() + " Bar!"; } 
    } 
} 
相关问题