2016-06-20 19 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クラスを模擬するのが難しいと思っています。

RuntimeプロセスがX結果またはY結果を返す場合に、 "doSomething"メソッドをテストしたいとしましょう。それを嘲笑する方法はありますか?

+0

の結果を制御できることに嘲笑ランタイムオブジェクトを返すために、静的Runtime.getRuntime()方法を模擬するものであり、それを少しでも変更しますか? –

+0

私は少し修正することができますが、ランタイムを渡すためにクラスを変更することはできません... – Panos

答えて

3

これは、PowerMockitomockStaticメソッドを使用して行うことができます。

アイデアは、あなたが、私は「リファクタリングすることはできません」と言うとき、それはあなたがいないことを意味しますが、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

関連する問題