일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- mock
- 세션
- 스프링부트
- 우아한세미나
- 프로그래머스
- 우아한테크코스
- CircuitBreaker
- 우테코
- 서블릿
- 스프링 부트
- 코드리뷰
- Docker
- Paging
- AWS
- 자바
- REDIS
- 트랜잭션
- 의존성
- JUnit5
- AOP
- JPA
- 미션
- HTTP
- yml
- MSA
- Spring Batch
- 레벨2
- 백준
- Level2
- 프리코스
- Today
- Total
늘
[Junit] Mock, Fake, Stub 테스트 더블의 종류 본문
테스트 더블
더블이란: 할리우드에서 배우들의 대역을 해주는 사람을 더블이라고 한다.
그래서 말 그대로 테스트할 때 실제 도메인(주연)을 사용하지 않고 Double(대역)을 사용해서 테스트를 한다고 생각하면 된다.
테스트 더블에는 크게 위와 같이 Dummy, Stub, Spy, Mock, Fake로 나눠진다.
Dummy
- 인스턴스화 하여 구현한 가짜 객체
- 기능 구현이 안돼있다.
Stub
- dummy를 이용하여 실제로 동작하는 것처럼 보이게 만드는 객체
- 기능 구현이 안돼 있다.
- 상태 검증을 위한 객체이다.
- 상태 검증이란 메서드가 수행된 후, 객체의 상태를 보며 올바르게 동작했는지 확인한다는 뜻입니다.
- 객체를 다양한 조건으로 값을 만들어주고 던져줘도 항상 동일한 값을 반환
Spy
- 스파이처럼 기록을 하는 역할을 가진 객체이다
- 몇 번 호출되었는지와 같이 기록할 때 사용한다.
Mock
- stub과 달리 행위 검증을 위한 객체이다.
- 행위 검증이란 메서드의 리턴 값으로 판단할 수 없는 경우 특정 동작을 수행하는지 확인한다는 뜻입니다.
@Test
public void mockTest(){
List mockedList = mock(List.class);
// 행위 추가
mockedList.add("one");
mockedList.clear();
// 행위 검증
verify(mockedList).add("one");
verify(mockedList).clear();
}
Fake
- 인메모리 디비라고 생각하면 된다.
- 디비가 처리하는 것처럼 로직을 작성한다.
public class FakeDao implements Dao{
Map<User, Account> accounts = new HashMap<>();
@Override
public Long save(User user){
accounts.put(...);
...
}
}
https://stackoverflow.com/questions/346372/whats-the-difference-between-faking-mocking-and-stubbing
What's the difference between faking, mocking, and stubbing?
I know how I use these terms, but I'm wondering if there are accepted definitions for faking, mocking, and stubbing for unit tests? How do you define these for your tests? Describe situations whe...
stackoverflow.com
https://codinghack.tistory.com/92
Test Doubles(테스트 더블) — Dummy, Fakes, Mocks, Spy and Stubs
자동화된 테스트를 작성할 경우에 테스트들이 의존성을 가지고 같이 실행되어야 하는 경우가 많이 있는데요. 예를 들어 사용자를 조회하는 로직을 테스트한다고 한다면 UserService에서 UserRepositor
codinghack.tistory.com
'백앤드 개발일지 > 자바' 카테고리의 다른 글
[Collection Framework] Map, Set, List 중 Map에 대해서 알아보자 (0) | 2022.12.20 |
---|---|
Reflection API (리플렉션) (0) | 2022.05.22 |
new ArrayList<>()와 Arrays.asList()와 List.of() (0) | 2022.03.13 |
[Java] 람다식과 스트림 (0) | 2022.02.17 |
클린 코드 - 13장 동시성 (0) | 2022.02.15 |