JUNIT HAMCREST找不到符号assertThat(java.lang.Long,org.hamcrest.Matcher <java.lang.long>)</java.lang.long>

时间:2014-11-18 00:28:00

标签: junit compilation hamcrest

所以我有一个简单的实体:

//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)存在且已导入...所以这里发生了什么?如果组合is和assertThat for Long会产生编译错误,我如何测试Long是否具有我期望的值?

解释为什么我测试get id ---它是我在setup()中保存的嵌套对象,它的getId()值在测试中显示为null,即使我知道我保存它(hibernate生成一个id)。

让我觉得自己像个白痴。

2 个答案:

答案 0 :(得分:3)

假设您使用的是最新版本的Hamcrest(1.3),Matchers类并没有使用任何assertThat方法。

您需要静态导入MatcherAssert类:

import static org.hamcrest.MatcherAssert.*;

答案 1 :(得分:0)

对我来说,我必须导入

import static org.assertj.core.api.Assertions.assertThat;