2017-03-07 8 views
0

私は現在、私が働いているプロジェクトでES 5とJestを使用しています.DBとやり取りするクラスの統合と単体テストに割り当てられました。Java Elasticsearchデータベーステスト

@Override 
public Aptitude save(Aptitude aptitude) { 
    Index index = new Index.Builder(aptitude).index(aptitudeIndexName).type(aptitudeTypeName).refresh(true).build(); 
    try { 
     client.execute(index); 
     return aptitude; 
    } catch (IOException e) { 
     logger.error("The aptitude couldn't be saved in the data base " + e.getMessage()); 
     throw new RuntimeException(e); 
    } 
} 

またはこのような1:

@Override 
public List<Aptitude> findAll() { 
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
    searchSourceBuilder.query(QueryBuilders.matchAllQuery()); 
    searchSourceBuilder.sort("id", SortOrder.ASC); 

    Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(aptitudeIndexName).build(); 

    try { 
     SearchResult result = client.execute(search); 

     if (!result.isSucceeded()) { 
      return null; 
     } 

     List<Hit<Aptitude, Void>> aptitudes = result.getHits(Aptitude.class); 
     return aptitudes.stream().map(this::getAptitude).collect(Collectors.toList()); 
    } catch (IOException e) { 
     logger.error("The search couldn't be executed" + e.getMessage()); 
     throw new RuntimeException(e); 
    } 
} 

、私の仕事は、必ずすべての私の作るためにいくつかのテスト(ユニットおよび統合)を書くことです

はasume私はこのようなメソッドを持っていることができますクラスが正常に動作しているかどうか、より良いテストカバレッジを得るために、私はESテストのために少しオンラインを検索しましたが、どのようにテストを行うべきかをよく理解できます。その後、DBが修復されなければならなかったでしょう

@Test 
public void aptitudeSaveDelete() { 
    Aptitude aptitude = new Aptitude(); 
    aptitude.setId(1993L); 
    aptitude.setEn("ENaptitudeEN"); 
    aptitude.setEs("ESaptitudeES"); 
    Aptitude aptitudeSaved = elasticsearchAptitudeRepository.save(aptitude); 

    assertEquals(aptitude.getEs(), aptitudeSaved.getEs()); 
    assertEquals(aptitude.getEn(), aptitudeSaved.getEn()); 
    assertEquals(aptitude.getId(), aptitudeSaved.getId()); 

    Aptitude aptitudeFoundById = elasticsearchAptitudeRepository.findById(String.valueOf(aptitude.getId())); 

    assertEquals(aptitude.getId(), aptitudeFoundById.getId()); 
    assertEquals(aptitude.getEn(), aptitudeFoundById.getEn()); 
    assertEquals(aptitude.getEs(), aptitudeFoundById.getEs()); 

    boolean wasDeleted; 
    wasDeleted = elasticsearchAptitudeRepository.deleteAptitudeById(String.valueOf(aptitude.getId())); 
    assertEquals(true, wasDeleted); 
} 

を私の同僚は、この種の試験は、DBを妥協することを教えてくれましたし、その場合の何かが彼らと間違っていた:

は、私はこのように見えたいくつかのテストをしました手動で

ここ損失で、ヘルプのいずれかの種類を使用すると、テストフレームワークいけない

答えて

1

最初にapreciatedている理由イムようです。コードをテストする必要があります。例:マッピングは正しいですか?

2番目:以前のテストが失敗した場合でも、すべての統合テストでDBが既知の状態になるように準備する必要があります。

私は通常、データの集計と評価*のためにDBunitを使用します。開発者あたりのBest Practices

  • 使用のデータベース・インスタンスクリーンアップを必要としない
  • 良いセットアップから

    引用

  • 使用する複数の小さなデータセット
  • は、*全体のテストクラスまたはテストスイート

注意のために一度古いデータのセットアップを実行します。私はまだ弾性検索を使用していませんでした。

関連する問題