2014-11-18 1 views
0

Так у меня есть простой объект:JUNIT Hamcrest не может найти символ assertThat (java.lang.Long, org.hamcrest.Matcher <java.lang.Long>)

//imports 
.... 
@Entity 
@Table(name="ratings") 
public class Rating { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
    public Long getId() { 
      return id; 
    } 

    public void setId(Long id) { 
      this.id = id; 
    } 

    .... 
} 

Тест:

import static org.hamcrest.Matchers.*; 

.... 
@Test 
public void shouldCreateARating() throws Exception { 
    Rating expected = createdRating; 
    assertThat(existingRating.getId(), is(1L)); 
} 
... 

Но когда я пытаюсь скомпилировать, я получаю эту ошибку компиляции:

[ERROR] /c:/limits/src/test/java/hello/RatingsControllerTest.java:[170,33] 
c:\limits\src\test\java\hello\RatingsControllerTest.java:170: cannot find symbol 
symbol : method assertThat(java.lang.Long,org.hamcrest.Matcher<java.lang.Long>) 
location: class hello.RatingsControllerTest 

Я проверил и is(T value) существует, и assertThat(T actual, org.hamcrest.Matcher<T> matcher) существуют и импортированы ... так что происходит здесь? Как я могу проверить, что значение Long имеет значение, которое я ожидаю, если объединение и assertThat for Long генерирует ошибку компиляции?

Объяснение, почему я тестирую идентификатор get id - это вложенный объект, который я сохраняю в setup(), и его значение getId() появляется как значение null в тесте, хотя я знаю, что я сохраняю он (который спящий режим генерирует идентификатор).

Заставляет меня чувствовать себя идиотом.

+0

Не могли бы вы добавить статический импорт для assertThat в код теста. –

ответ

3

Предполагая, что вы используете самую последнюю версию Hamcrest (1.3), класс Matchers не имеет методов assertThat.

Вы должны статического импорта в MatcherAssert класс:

import static org.hamcrest.MatcherAssert.*; 
Смежные вопросы