0

我有一个场景,我正在消费一个事件并将详细信息保存在数据库中。现在存储在数据库中的记录具有 id 字段 autogenerated @GeneratedValue(strategy = GenerationType.IDENTITY)

在我的测试用例中,我需要检查数据是否存储在数据库中并且是否符合预期。但我不确定我将如何findById()处理 SpringBoot Crud/JPA Repository,因为我不知道生成了什么值。

任何帮助,将不胜感激。

4

2 回答 2

0

我认为您正在寻找注释@DirtiesContext

Test annotation表示ApplicationContext与测试关联的对象是脏的,因此应该关闭并从上下文缓存中删除。-javadoc _

阅读第 9.3.4 节-此处

检查 -示例如下:

@Test
@DirtiesContext
public void save_basic() {
    // get a course
    Course course = courseJpaRepository.findById(10001L);
    assertEquals("JPA ", course.getName());

    // update details
    course.setName("JPA - Updated");
    courseJpaRepository.saveOrUpdate(course);

    // check the value
    Course course1 = courseJpaRepository.findById(10001L);
    assertEquals("JPA - Updated", course1.getName());
}

顺便说一句 - 如何获取 id :只需通过 getter 方法从返回类型save

EmployeeDetails employeeDetails = emaployeeService.saveEmployeeDetails(employee);
int temp = employeeDetails.getID()

相关帖子: 这里

于 2021-06-08T15:55:00.230 回答
0

从 CrudRepository 接口看一下save方法。Spring 在事务中执行此方法,完成后 Hibernate 将在返回的实体中生成标识符。

假设您的实体和存储库如下所示:

....
public class SomeEntity {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    public SomeEntity(String name){
        this.name = name;
    }
....
}

public interface SomeRepository extends CrudRepository<SomeEntity, Long> {
}

保存实体后:

    SomeEntity someEntity = someRepository.save(new SomeEntity("Some entity"));

someEntity.getId()将包含实际的记录 ID,可以在您的测试中进一步使用。

于 2021-06-08T22:46:30.890 回答