所以我有一个简单的实体:
//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)。
让我觉得自己像个白痴。
答案 0 :(得分:3)
假设您使用的是最新版本的Hamcrest(1.3),Matchers
类并没有使用任何assertThat
方法。
您需要静态导入MatcherAssert类:
import static org.hamcrest.MatcherAssert.*;
答案 1 :(得分:0)
对我来说,我必须导入
import static org.assertj.core.api.Assertions.assertThat;