2013-01-23 80 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!"; } 
    } 
} 
相關問題