2016-03-24 35 views
0

を模擬することができませんMockito:、私はmockitoから何かを(静的または非静的メソッド)模擬することができません静的&非静的メソッド

これらは私のクラスで、

Calculations.java

public class Calculations { 

    public void printZero() { 
     System.out.println("zero"); 
    } 

    public static void printOne() { 
     System.out.println("one"); 
    } 
} 

これは私のPostData.java

public class PostData { 

    public static Calculations calc = new Calculations(); 
    public static void postTheData() { 

     calc.printZero(); 
     Calculations.printOne(); 
    } 
} 

ユニットテストクラス、 ですTestClass.java

public class TestClass { 

    @Test 
    public void addTest() { 

     Calculations lmock = mock(Calculations.class); 

     // can't have Calculations.calc.printZero() in when() :cause: argument passes to when() must be a mock object. 
     doNothing().when(lmock).printZero(); 

     // cause: method when(void) is undefined for the type TestClass 
     // when(lmock.printZero()).doNothing(); 

     // cause: argument passed to when() must be a mock object. 
     // doNothing().when(Calculations.printOne()); 

     PostData.postTheData(); 
    } 
} 

私の出力にコンパイルされた "0"と "1"という出力があり、理想的には無視されているはずです。

私はmockitoのためにcloud-mockito-all-1.10.19.jarを使用しています。 junitの最新のjarファイル。

私はここに何かが見つからないことを知っていますが、何が分かりません!あなたが私に答えることができれば、大きな助けになるでしょう。

+0

あなたは実際には擬似 'Calculations'クラスを使用していません - あなたは' PostData'で静的なものを使用しています。 PowerMockitoを使用して静的メソッドをモックする必要があります。 –

+0

* "mockitoから何か(静的メソッドまたは非静的メソッド)をモックすることができません" *したがって、動作しなくてもサポートされていないにもかかわらず、mockitoで静的メソッドをモックできますか?それにはPowerMockのような追加のものが必要です。 – Tom

答えて

2

PostDataは、模擬Calculationsオブジェクトを使用していません。

calcフィールド用のセッターを追加し(おそらくそれを非スタティックに変更する)、PostDatacalcフィールドを模擬フィールドに設定することができます。

+0

ありがとうたくさんのボブ! 実際、私はPostData.javaに何も追加できませんが、何かを追加する必要があることがわかりました(私が見た多くのブログから)。セッターのアイデアをありがとう。あなたは素晴らしいです! –

関連する問題