2016-08-10 7 views
0

я получил два следующих тестов:Два испытания прошли, но Elasticsearch показывает только результаты первых один

@Test 
    public void shouldCreateSingleBookEntityWithRepository(){ 

     //given 
     Book book = Book.builder().id("1").title("Clean Code").build(); 
     IndexQuery indexQuery = getIndexQuery(book); 

     //when 
     String documentId = bookService.saveBook(indexQuery); 

     //then 
     assertThat(bookService.findOne(book.getId()), is(notNullValue())); 
     assertThat(bookService.findOne(book.getId()).getId(), is(documentId)); 
    } 

    @Test 
    public void shouldCheckAllDocumentsPresenceAfterInsertSingleThreaded(){ 

     //given 
     List<IndexQuery> indexQueries = new ArrayList<>(); 

     indexQueries.add(Book.builder().id("1").title("Learn Scala").build().getIndexQuery()); 
     indexQueries.add(Book.builder().id("2").title("Clean Code").build().getIndexQuery()); 
     indexQueries.add(Book.builder().id("3").title("Head First: JPA").build().getIndexQuery()); 
     indexQueries.add(Book.builder().id("4").title("Effective Java").build().getIndexQuery()); 

     bookService.saveBulkOfBooks(indexQueries); 

     SearchQuery searchQuery = new NativeSearchQueryBuilder() 
       .withIndices(INDEX_NAME) 
       .withTypes(BOOK_TYPE_NAME) 
       .withQuery(matchAllQuery()) 
       .build(); 

     //when 
     Long bookCount = elasticsearchTemplate.count(searchQuery); 
     System.out.print("\n\n##########################################\n" 
       +indexQueries.size()+bookCount+ bookService.findOne("2").getTitle()+ 
       "\n####################################################\n\n"); 
     //then 
     assertThat(bookCount, is(Long.valueOf(indexQueries.size()))); 
     assertThat(bookService.findOne("1").getTitle(), is("Learn Scala")); 
     assertThat(bookService.findOne("2").getTitle(), is("Clean Code")); 
     assertThat(bookService.findOne("3").getTitle(), is("Head First: JPA")); 
     assertThat(bookService.findOne("4").getTitle(), is("Effective Java")); 
    } 

Каждый раз, когда я бег оба теста они проходят. Тем не менее, результаты, сохраненные в ES, представляют собой только один первый тест book.

GET /bookshop/book/_search 
{ 
    "took": 34, 
    "timed_out": false, 
    "_shards": { 
     "total": 2, 
     "successful": 2, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 1, 
     "max_score": 1, 
     "hits": [ 
     { 
      "_index": "bookshop", 
      "_type": "book", 
      "_id": "1", 
      "_score": 1, 
      "_source": { 
       "title": "Clean Code", 
       "id": "1" 
      } 
     } 
     ] 
    } 
} 

Когда я игнорирую первое испытание, я получил результат 4-х книг из второго теста в ES.

я получил только @Before метод в моем тестовом случае

@Before 
    public void before() { 
     elasticsearchTemplate.deleteIndex(Book.class); 
     elasticsearchTemplate.createIndex(Book.class); 
     elasticsearchTemplate.putMapping(Book.class); 
     elasticsearchTemplate.refresh(Book.class); 
    } 

Почему тесты проходят, но ES показывает только один документ книгу из первого теста?

ответ

1

Это потому, что метод с аннотацией @Before будет выполняться перед любым методом, отмеченным с помощью @Test. Вы можете попробовать использовать @BeforeClass. Однако проблема, которую я вижу при использовании @BeforeClass, заключается в том, что вы не можете получить доступ к своему elasticsearchTemplate там, метод должен быть static.

Вместо этого вы можете использовать @PostConstruct. например

@PostConstruct 
public void init() { 

    elasticsearchTemplate.deleteIndex(Book.class); 
    elasticsearchTemplate.createIndex(Book.class); 
    elasticsearchTemplate.putMapping(Book.class); 
    elasticsearchTemplate.refresh(Book.class); 
} 
+0

Ну, метод @Before в порядке, потому что он выполняется перед каждым тестом. Также перед вторым тестированием индекс должен быть удален и должен быть создан новый индекс. Проблема заключалась в том, что «bookService», вероятно, ошибочно автоподключен. Теперь я вернулся к предыдущей версии git, где все было в порядке :) У меня есть upvoted. – mCs

 Смежные вопросы

  • Нет связанных вопросов^_^