在集成测试中注入存储库依赖是不好的做法

问题描述

我正在使用 Spring Boot 并遵循 TDD 开发 REST CURD API。我从 READ 操作开始测试 READ 工作我必须在我的数据库中预填充数据。为此,我使用 H2 DB 并创建了我的存储库,并在我的集成测试设置步骤中使用此存储库在执行 GET 实际数据之前填充数据。我的大学告诉我在集成测试中使用 Repository 为这个 GET 操作测试创建数据的不好做法,他建议在设置步骤中调用 POST API 端点,执行 GET 测试也实现 PUT 和 DELETE IT 测试。

我的问题是

  1. 为了在集成测试类中设置数据而注入实际存储库是否错误
  2. 在执行实际测试逻辑之前,我们可以在设置或 GET 测试用例中使用/调用和端点 (POST) 吗?
  3. 我们能否在 init/setup 中调用 POST 端点并使用 Repository 填充数据并使用 POST 数据实现 GET、PUT、DELETE 测试?建议在设置中调用直接 POST 端点以测试 Test 类中的另一个端点并在类级别使用 @TestOrder 注释。

案例 1

@SpringBoottest
@AutoConfiguremockmvc
public class CURDtest() {
 
  @Autowired
  private TestMovieRepository testMovieRepository;

  @BeforeEach
  void init() {
   Movie myMovie = new Movie("test");
   testMovieRepository.save(myMovie);
}

@Test
void getMovie_whenReturnsMovie(){
  //Test logic using mockmvc;
}
}

情况 2:

@SpringBoottest
@AutoConfiguremockmvc
public class CURDtest() {
 
  
  @BeforeEach
  void init() {
   //call POST Endpoint usin mockmvc populate data in table
}

@Test
void getMovie_whenReturnsMovie(){
  //Test logic using mockmvc;
}
}

情况 3:

@SpringBoottest
@AutoConfiguremockmvc
@TestOrder
public class CURDtest() {
 
  
  @BeforeEach
  void init() {
   //call POST Endpoint usin mockmvc populate data in table
}

@Test
@Order(1)
void getMovie_whenReturnsMovie(){
  //Test logic using mockmvc;
}

@Test
@Order(2)
void updateMovie_whenReturnsMovie(){
  //Test logic using mockmvc;
}

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)