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

我有一个测试检查我使用 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 返回插入的 id,其 de 值例如为 5000。有可能在测试范围内为实体 Guy 设置星值?谢谢!


慕无忌1623718
浏览 136回答 1
1回答

一只斗牛犬

不要检查新创建对象的 ID 的实际值。没有理由检查 id。id 由数据库引擎生成,但您在测试期间使用不同的引擎,因此您的测试用例将测试您的测试环境的行为......测试可以以随机顺序运行,因此当您添加更多测试或更改测试数据时,您的旧测试将开始失败。如果你真的想测试一些东西,那么测试新创建的对象的属性(正如XtremeBaumer建议的那样)。或者你可以测试创建时返回的对象是否与GET请求时返回的对象完全相同。assertEquals(jsonObject, testGuy);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java