user10235054:
私は春のデータの助けを借りて作成されたリポジトリ(たとえば、MovieRepository)を持っています。
public interface MovieRepository extends JpaRepository<Movie, Short> {}
iが提供するメソッドのユニットテストの一つにしたいとしましょうJpaRepositoryインタフェース exempleためgetOne(short id)
、意味を作るということですか?私は通常、任意の実装コードを自分で書いていないよと。
そして、私はexempleのために、クエリで自分自身をする方法を記述した場合について:
@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);
私は、このメソッドをテストする必要がありますか?
アーヴィン・Szilagyi:
あなたが任意の実装コードを自分で書いていないので、リポジトリのためのユニットテストを書くための理由はありません。あなたのクエリをテストしたい場合は、書き込みの統合テストに、より賢明です。これらは、インメモリ・データベースを使用して行われており、テストは、Springコンテナ内で実行されなければなりません。春ブーツは、統合テストを行うためのサポートをたくさん持っています:
- テストはして実行する必要がある
@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));
...
}
}