0
public class abc{
public getTable(String table){
    //some complex logic here.//to be skipped while testing
    return "schemaName." + table;
}

public buildQueryMethod1(){
    String sql = "select fields from "+getTable("table1") +
                "union" +
                "select fields from " + getTable("table2") +
                .
                .
                .
    return sql;
}
 }

buildQueryMethod1() をテストしたい。「ABC」を返すように getTable メソッドをモックするにはどうすればよいですか。string を渡された引数に変換し、渡された引数とメソッドが呼び出された回数に関係なく、結果の文字列を何度でも返します。

4

2 に答える 2

0

テーブル名の生成を行うために別のクラスに注入する必要がありますが、Mockito のスパイ機能を使用できます。コードがコンパイルされないように見えますが、テストでは次のようにします。

public class ExampleTest() {

    private abc example = new abc();

    @Test
    public void test() {
        abc spy1 = spy(abc);

        stub(spy1. getTable("table1")).toReturn("ABC");
        stub(spy1. getTable("table2")).toReturn("ABC")

        // do some testing on example...
    }
}

Mockito の静的スタブとスパイ メソッドをインポートする必要があります。

于 2013-07-19T10:10:27.973 に答える
0

最善の方法は、Mockito が提供するマッチャーを利用することです。

@Test
public void test() {
   abc spyInstance = PowerMockito.spy(abc); //Since it's a public method
                                            //you can probably just use
                                            //Mockito here.
   doReturn("ABC.").when(abc).getTable(org.mockito.Matchers.anyString());

   //do some testing
}

これは@Ayubの答えと大差ありません。主な違いは、の使用ですanyString()

メソッドに渡された引数を返すと便利な場合があります。

@Test
public void test() {
   abc spyInstance = PowerMockito.spy(abc); //Since it's a public method
                                            //you can probably just use
                                            //Mockito here.
   doAnswer(new Answer<String>() {
      @Override
      public String answer(InvocationOnMock invocation) throws Throwable {
         return (String)invocation.getArguments()[0];
      }
   }).when(abc).getTable(org.mockito.Matchers.anyString());

   //do some testing
}

これは必要以上のものですが、特に匿名の内部クラスを内部クラスに移動し、複数のテストで動作を再利用する場合に役立ちます。

于 2013-07-19T19:23:04.550 に答える