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

问题描述 投票:0回答:1

我有一个测试,检查我使用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的星值?谢谢!

java h2 jpa-2.0
1个回答
0
投票

不要检查新创建的对象的ID的实际值。

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

如果你真的想测试一些东西,那么测试新创建的对象的属性(如XtremeBaumer建议的那样)。或者,您可以测试创建期间返回的对象是否与GET请求期间返回的对象完全相同。

assertEquals(jsonObject, testGuy);
© www.soinside.com 2019 - 2024. All rights reserved.