작성
·
421
·
수정됨
0
안녕하세요 호돌맨님 강의 듣던 도중 mock 으로도 할 수 있다해서 고민해보는중 잘 모르겠어서 질문을 올립니다.
public void write(PostCreate postCreate) {
Post post = Post.builder()
.title(postCreate.getTitle())
.content(postCreate.getContent())
.build();
postRepository.save(post);
}
위와 같은 write 메소드를 검증하려면 test 코드에서
posRepostiroy를 mock으로 주입받고 postService.write(postCreate)를 호출시 postRepository.save를 호출할때 어떤 일을 하게 될것이냐 를 stubbing 하려고 하는데
실제 h2 메모리 db에 저장을 해야, 제대로 저장이 되었다는 것을 아래 처럼 검증할 수 있을 것 같은데
Assertions.assertEquals(1L, postRepository.count());
위 write 메소드의 경우 아무것도 return 하지 않으니 save 메소드 stubbing을 어찌 해야할지 모르겠습니다...
아니면 접근 자체가 틀렸을까요? 실제 외부와 연동이 잘되는지 확인하는것이니 mock 쓰겠다는 생각 자체가 에러인것인가요?
감사합니다.
답변 1
1
안녕하세요.
질문을 남겨주셔서 감사합니다.
테스틀위해 JpaRepository를 구현하는 MockPostRepository를 만든다고 생각해봅시다.
class MockPostRepository implements JpaRepository<Post, Long> {
@Override
public <S extends Post> S save(S entity) {
return myList.add(entity)
}
@Override
public List<Post> findAll() {
return ...;
}
@Override
public List<Post> findAll(Sort sort) {
return ...;
}
@Override
public List<Post> findAllById(Iterable<Long> longs) {
return ...;
}
@Override
public <S extends Post> List<S> saveAll(Iterable<S> entities) {
return null;
}
...생략
}
가능은한데 정말 난감하겠지요?..
그러면 실제 스프링 Context를 모두 올리지 않고 Jpa Repository를 알아서 처리해주는 담당자가 있으면 어떨가 생각하게됩니다.
그것이 바로 `@DataJpaTest` 입니다. 관련해서 구글링 해보시면 도움이 될겁니다.
p/s: mocking을 써서 https://stackoverflow.com/a/51258234 이렇게 해결하는 분도 있네요.
감사합니다.