2017-06-26 15 views
0

objOfClassB.realMethod()メソッドが呼び出されるたびにClassA.mockMethod()に電話したいと思います。mockito/Junitで実際のメソッドの代わりにモックメソッドを呼び出す方法

public class ClassA{ 
    public static int mockMethod(String url, MySql sql){ 
     int res=0 
     // do work 
     return ; 
    } 

} 

Definition of executeUpdate1() 
class Veps{ 
    protected synchronized int realMethod(String url, MySql sql){ 
    ---- 
    ----- 
    } 
} 

public class VepsTest { 
     public void setUp() throws Exception { 

      veps = mock(Veps.class); 

      when(objOfClassA.realMethod(any(String.class), any())).thenReturn(objOfClassB.mockMethod(any(String.class),any())); 
     } 
} 


org.mockito.exceptions.misusing.InvalidUseOfMatchersException: 
Invalid use of argument matchers! 
2 matchers expected, 4 recorded. 
This exception may occur if matchers are combined with raw values: 
    //incorrect: 
    someMethod(anyObject(), "raw String"); 
When using matchers, all arguments have to be provided by matchers. 
For example: 
    //correct: 
    someMethod(anyObject(), eq("String by matcher")); 

答えて

1

mockitoは明らかにエラーを報告します。引数のマッチャーの

無効な使用! 2人のマッチャーが予想され、4人が記録された。

then*句にMatcherを使用しないでください。あなたの問題はように固定することができます。

when(veps.executeQuery1(any(String.class), any(MySql.class))) 
    .thenReturn(DBConnection.mockExecuteQuery("??","??")); 

when(veps.executeUpdate1(any(String.class), any())) 
    .thenReturn(DBConnection.mockExecuteUpdate("??","??")); 

が、別の問題が表示されます:は、なぜあなたは、データベースから結果を問い合わせる必要があるのですか?あなたは単に偽の結果に一定の値を取ることができます:

when(veps.executeQuery1(any(String.class), any(MySql.class))) 
    .thenReturn(1); 
//    ^--- replace the constant 1 with yours 

when(veps.executeUpdate1(any(String.class), any())) 
    .thenReturn(1); 
//    ^--- replace the constant 1 with yours 

は、あなたのテストで使用する前に、さらなるmockito documentationを参照してくださいする必要があります。

+0

お返事ありがとうございます。 私はany()を "??" IDEがコンパイルの警告を表示する "DBConnection型のメソッドmockExecuteQuery(String、MySql)は引数(String、String)には適用されません" モックメソッドを実装する必要はありません。私のテストが挿入され、引っ張られるデータに依存しているからです。私はデータベースをモックする必要がありますが、実際のデータベースの動作を保持してください。 –

+0

@SharatChandra全くありません。しかし、私はまだあなたに尋ねます: "**なぜあなたはデータベースから結果を問い合わせる必要がありましたか?**" –

+0

コードはデータベース上の特定の操作を行います。私のテストでは、実際のデータベースを使用せずに正しいデータがデータベースに書き込まれたかどうかを検証する必要があります。 –

関連する問題