Spring Boot-单元测试Spring Data JPA存储库

时间:2018-08-16 16:42:37

标签: java spring-boot junit spring-data

我有一个借助Spring Data创建的存储库(例如MovieRepository)。

public interface MovieRepository extends JpaRepository<Movie, Short> {}  

假设我要对示例getOne(short id) JpaRepository接口提供的方法之一进行单元测试,这有意义吗?因为我通常不亲自编写任何实现代码。

如果我自己编写一个带有查询的方法,例如:

@Query("SELECT m " +
            "FROM Movie m inner join  MovieGenre mg ON m.id = mg.movie.id " +
            "WHERE mg.genre.id = (SELECT mg2.genre.id FROM MovieGenre mg2 WHERE mg2.movie.id = ?1 AND mg2.movie.id <> mg.movie.id AND mg.genre.id = mg2.genre.id) " +
            "GROUP BY mg.movie.id " +
            "ORDER BY count(m) DESC")
Page<Movie> findRelatedMoviesToMovieById(@Param("id") short id, Pageable pageable);  

我应该测试这种方法吗?

1 个答案:

答案 0 :(得分:4)

没有理由为存储库编写单元测试,因为您自己没有编写任何实现代码。如果要测试查询,则最好编写集成测试。这些是通过使用内存数据库完成的,并且测试应在Spring容器内运行。 Spring-Boot为进行集成测试提供了很多支持:

  • 测试应使用@RunWith(SpringRunner.class)运行,它会弹出Spring容器;
  • @DataJpaTest-这些应与SpringRunner.class结合使用以运行内存数据库;

示例:

@RunWith(SpringRunner.class)
@DataJpaTest
public class MovieRepositoryTests {

   @Autowired
   private MovieRepository myRepository;

   @Test
   public void findRelatedMoviesToMovieByIdTest() {
       ...
       Page<Movie> movies= myRepository.findRelatedMoviesToMovieByIdTest(1, new PageRequest(1, 10));
       ...
   }
}