2015-05-27 148 views
0

我必須爲某些方法進行一些jUnit測試(使用mocks),並且我無法更改源代碼。有沒有可能在不更改源代碼的情況下改變函數的行爲(可能是模擬)?junit測試中的模擬方法

看起來是一個直截了當的例子: 類AB是源代碼(無法更改它們)。當我在B中調用方法時,我想改變A的行爲。有任何想法嗎?

public class A { 
    public String run(){ 
     return "test"; 
    } 
} 

public class B extends A { 
    public void testing() { 
     String fromA = run(); //I want a mocked result here 
     System.out.println(fromA); 
    } 
} 

public class C { 
    B mockB = null; 

    @Test 
    public void jUnitTest() { 
     mockB = Mockito.mock(B.class); 

     // And here i want to call testing method from B but with a "mock return" from run()   
    } 
} 
+0

請發佈至少需要編譯的示例代碼。 –

回答

1

您可以使用mockito的spy()方法創建部分模擬。所以你的測試類看起來像

public class C { 

    @Test 
    public void jUnitTest(){ 
     B mockB = spy(new MockB()); 

     when(mockB.run()).thenReturn("foo"); 

     mockB.testing(); 
    } 
} 

這假設您想要模擬的方法沒有聲明爲final。