2016-04-18 9 views
1

私はElasticクエリビルディングをテストするユニットテストを書いてみたいと思います。特定のパラメータ値が特定のクエリを生成することをテストしたい。書く方法クエリービルディングをテストするための弾性ユニットテスト

私はESTestCaseを調べ始めました。私はあなたがESTestCaseを使ってクライアントをモックすることができることを知っています。私は実際にESノードを模擬する必要はなく、クエリ構築部分を再現する必要がありますが、それにはクライアントが必要です。

誰もこのような問題に対処しましたか?

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 

import org.elasticsearch.action.search.SearchRequestBuilder; 
import org.elasticsearch.client.Client; 
import org.elasticsearch.client.transport.TransportClient; 
import org.elasticsearch.common.settings.Settings; 
import org.elasticsearch.common.unit.DistanceUnit; 
import org.elasticsearch.test.ESIntegTestCase; 
import org.elasticsearch.test.ESTestCase; 
import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.Ignore; 
import org.junit.Test; 

import com.google.common.collect.Lists; 

public class SearchRequestBuilderTests extends ESTestCase { 
    private static Client client; 

    @BeforeClass 
    public static void initClient() { 
     //this client will not be hit by any request, but it needs to be a non null proper client 
     //that is why we create it but we don't add any transport address to it 
     Settings settings = Settings.builder() 
      .put("", createTempDir().toString()) 
      .build(); 

     client = TransportClient.builder().settings(settings).build(); 
    } 

    @AfterClass 
    public static void closeClient() { 
     client.close(); 
     client = null; 
    } 

    public static Map<String, String> createSampleSearchParams() { 
     Map<String, String> searchParams = new HashMap<>(); 
     searchParams.put(SenseneConstants.ADC_PARAM, "US"); 
     searchParams.put(SenseneConstants.FETCH_SIZE_QUERY_PARAM, "10"); 
     searchParams.put(SenseneConstants.QUERY_PARAM, "some query"); 
     searchParams.put(SenseneConstants.LOCATION_QUERY_PARAM, ""); 
     searchParams.put(SenseneConstants.RADIUS_QUERY_PARAM, "20"); 
     searchParams.put(SenseneConstants.DISTANCE_UNIT_PARAM, DistanceUnit.MILES.name()); 
     searchParams.put(SenseneConstants.GEO_DISTANCE_PARAM, "true"); 

     return searchParams; 
    } 

    @Test 
    public void test() { 
     BasicSearcher searcher = new BasicSearcher(client); // this is my application's searcher 
     Map<String, String> searchParams = createSampleSearchParams(); 

     ArrayList<String> filterQueries = Lists.newArrayList(); 
     SearchRequest searchRequest = SearchRequest.create(searchParams, filterQueries); 

     MySearchRequestBuilder medleyReqBuilder = new MySearchRequestBuilder.Builder(client, "my_index", searchRequest).build(); 
     SearchRequestBuilder searchRequestBuilder = medleyReqBuilder.constructSearchRequestBuilder(); 
     System.out.print(searchRequestBuilder.toString()); 
    // Here I want to assert that the search request builder output is what it should be for the above client params  
    } 
} 

私はこれを取得し、コードで何も実行しません:

Assertions mismatch: -ea was not specified but -Dtests.asserts=true 
REPRODUCE WITH: mvn test -Pdev -Dtests.seed=5F09BEDD71BBD14E -  Dtests.class=SearchRequestBuilderTests -Dtests.locale=en_US -Dtests.timezone=America/Los_Angeles 
NOTE: test params are: codec=null, sim=null, locale=null, timezone=(null) 
NOTE: Mac OS X 10.10.5 x86_64/Oracle Corporation 1.7.0_80 (64-bit)/cpus=4,threads=1,free=122894936,total=128974848 
NOTE: All tests run in this JVM: [SearchRequestBuilderTests] 
+0

https://www.elastic.co/guide/en/として実行> elasticsearch/reference/current/testing-framework.html –

+4

ESTestCaseとESIntegTestCaseを使用するためのコード例がさらに必要であれば – Aliya

答えて

3

明らかに少し遅れたが...

だから、これは実際にESテストフレームワークとは何の関係もありませんが、むしろあなたの実行設定。あなたがeclipseでこれを実行していると仮定すると、これは実際にはAssertions mismatch: -ea was not specified but -Dtests.asserts=trueの複製です。

  1. eclipseの設定 - > junit - > -ea checkbox enableを追加します。
  2. 右Eclipseプロジェクトをクリック - >実行の設定 - - > [引数]タブ - > [VM引数に-eaオプションを追加し
関連する問題