在H2 JPA测试中更新@Id(使用身份策略)

时间:2019-02-21 15:59:29

标签: java h2 jpa-2.0

我有一个测试,用于检查我正在使用H2进行测试的最后一次插入的ID

@Entity
@Data
public class Guy implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(nullable = false)
  protected Long id;
  @Column(nullable = false)
  protected String name;
}

这是测试

@Test
public void getTest() {
  String jsonResponse = "{\"name\":\"andrew\"}";
  Response response = given().body(jsonResponse).header("Content-Type", 
 "application/json").header("Client", 123).post("/thin/guy");

  assertEquals(HttpServletResponse.SC_CREATED,response.getStatusCode());
  //here the record was created

  JSONObject jsonObject = new JSONObject(response.getBody().print());
  Response resGet = given().header("Client",123).get("/thin/guy/"+String.valueOf(jsonObject.get("id")));
  assertEquals(HttpServletResponse.SC_OK, resGet.getStatusCode());

  //this is the response "{\"id\":1,\"name\":\"andrew\"}"
  JSONObject getGuy = new JSONObject(resGet.getBody().print());

  assertEquals(5000L,Long.valueOf(getGuy.get("id").toString()));
}

我该怎么做才能仅在测试范围内运行的H2database返回具有de值的插入ID,例如5000。 是否可以在测试范围内为实体Guy设置星级值?谢谢!

1 个答案:

答案 0 :(得分:0)

请勿检查新创建对象的ID的实际值。

  • 没有理由检查ID。该ID由数据库引擎生成,但是您在测试期间使用了不同的引擎,因此您的测试用例将测试您的测试环境的行为...
  • 测试可以按随机顺序运行,因此,当您添加更多测试或更改测试数据时,旧测试将开始失败。

如果您确实要测试某些东西,请测试新创建的对象的属性(建议XtremeBaumer)。 或者,您可以测试创建期间返回的对象是否与GET请求期间返回的对象完全相同。

assertEquals(jsonObject, testGuy);