2016-06-20 155 views
3

我有在它的一些方法是使用調用Runtime.getRuntime()EXEC JUnit測試

Runtime.getRuntime().exec ... 

例如一個類:

public class MyClass { 
    public void doSomething() { 
     ...do something... 
     Runtime.getRuntime().exec ... 
     ...do something else 
    } 
} 

不幸的是我 「不能重構」 由於類滿足一些要求。我想在這個類上創建jUnit測試,我發現很難嘲笑Runtime類。

假設我想在運行時進程返回X結果或Y結果的情況下測試「doSomething」方法。有什麼辦法來嘲笑它嗎?

+0

的結果,這意味着你不能甚至修改它一點點? –

+0

我可以修改一點點,但是我無法改變這個類來通過運行時... – Panos

回答

3

您可以使用PowerMockitomockStatic方法做到這一點。

的想法是嘲笑靜態Runtime.getRuntime()方法返回一個嘲笑運行時對象,並在當你說我「不能重構」你能控制的exec()

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Runtime.class) 
public class TestClass { 

    @Mock private Runtime mockRuntime; 

    @Test 
    public void test() { 
    PowerMockito.mockStatic(Runtime.class); 

    when(Runtime.getRuntime()).thenReturn(mockRuntime); 
    when(mockRuntime.exec()).thenReturn("whatever you want"); 

    // do the rest of your test 
    } 
} 
+0

我認爲你是對的!我忘了使用mockStatic,只是模擬。我會現在測試!謝謝 – Panos

+0

好的。雖然它似乎在嘲笑它......最後它似乎忽略了模擬並實際尋找腳本來執行......任何想法? – Panos

相關問題