为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕无忌1623718 2022-06-30 17:54:49
我有一个测试检查我使用 H2 进行测试的最后插入的 id@Entity@Datapublic class Guy implements Serializable {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  @Column(nullable = false)  protected Long id;  @Column(nullable = false)  protected String name;}这是测试@Testpublic 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 返回插入的 id,其 de 值例如为 5000。有可能在测试范围内为实体 Guy 设置星值?谢谢!
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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

  • 没有理由检查 id。id 由数据库引擎生成,但您在测试期间使用不同的引擎,因此您的测试用例将测试您的测试环境的行为......

  • 测试可以以随机顺序运行,因此当您添加更多测试或更改测试数据时,您的旧测试将开始失败。

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

assertEquals(jsonObject, testGuy);


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信