我有一个借助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);
我应该测试这种方法吗?
答案 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));
...
}
}