문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
java:mockito [2012/07/05 10:31] kwon37xi 새로 만듦 |
java:mockito [2023/11/30 14:17] kwon37xi [mockStatic] |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Mockito ====== | ====== Mockito ====== | ||
- | * [[http://code.google.com/p/ | + | * [[https://github.com/ |
- | * [[http://refcardz.dzone.com/ | + | * https:// |
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | ===== argThat ===== | ||
+ | '' | ||
+ | |||
+ | 이를 사용하면 특히 테스트 대상 메소드 내부에서 직접 '' | ||
+ | |||
+ | [[http:// | ||
+ | <code java> | ||
+ | class IsListOfTwoElements extends ArgumentMatcher< | ||
+ | public boolean matches(Object list) { | ||
+ | return ((List) list).size() == 2; | ||
+ | } | ||
+ | } | ||
+ | List mock = mock(List.class); | ||
+ | |||
+ | when(mock.addAll(argThat(new IsListOfTwoElements()))).thenReturn(true); | ||
+ | |||
+ | mock.addAll(Arrays.asList(" | ||
+ | |||
+ | verify(mock).addAll(argThat(new IsListOfTwoElements())); | ||
+ | </ | ||
+ | |||
+ | 가능하면 '' | ||
+ | <code java> | ||
+ | private List< | ||
+ | return argThat(new ArgumentMatcher< | ||
+ | @Override | ||
+ | public boolean matches(Object argument) { | ||
+ | List< | ||
+ | return args.size() == strings.size() && args.containsAll(strings); | ||
+ | } | ||
+ | }); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | <code java> | ||
+ | doReturn(리턴값).when(mockObject).mockMethod(argThat(....)); | ||
+ | </ | ||
+ | |||
+ | ===== ArgumentCaptor ===== | ||
+ | * [[https:// | ||
+ | |||
+ | <code java> | ||
+ | // MockitoRunner 사용시 | ||
+ | @Captor | ||
+ | ArgumentCaptor< | ||
+ | |||
+ | // 코드로 직접 지정 | ||
+ | ArgumentCaptor< | ||
+ | </ | ||
+ | ===== initMocks ===== | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | <code java> | ||
+ | public class CalculatorApplicationTestInitMocks { | ||
+ | @Mock private Adder adderMock; | ||
+ | @Mock private Subtracter subtracterMock; | ||
+ | @Mock private Multiplier multiplierMock; | ||
+ | @Mock private Divisor divisorMock; | ||
+ | |||
+ | @Before | ||
+ | public void setUp() { | ||
+ | MockitoAnnotations.initMocks(this); | ||
+ | ... | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== JUnit 5 ===== | ||
+ | * [[java: | ||
+ | * [[https:// | ||
+ | |||
+ | <code java> | ||
+ | @ExtendWith(MockitoExtension.class) | ||
+ | class UserServiceTest { | ||
+ | @Mockito ... | ||
+ | } | ||
+ | |||
+ | // Strictness 를 설정하려면 아래 추가. default가 STRICT_STUBS임. LENIENT 로 변경하기 | ||
+ | @MockitoSettings(strictness = Strictness.LENIENT) | ||
+ | </ | ||
+ | * '' | ||
+ | ===== mockStatic ===== | ||
+ | * Mockito '' | ||
+ | * static method mocking. 특히 '' | ||
+ | * [[https:// | ||
+ | * 항상 '' | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | import static org.mockito.Mockito.mockStatic; | ||
+ | |||
+ | assertEquals(" | ||
+ | try (MockedStatic< | ||
+ | mocked.when(Foo:: | ||
+ | // 혹은 Mockito.when(Foo.method()).thenReturn(" | ||
+ | assertEquals(" | ||
+ | mocked.verify(Foo:: | ||
+ | } | ||
+ | assertEquals(" | ||
+ | </ | ||
+ | * 만약 mocking 할 필요가 없는 다른 static method가 호출된다면 실제 코드를 호출하게 명시적으로 지정해야 한다. | ||
+ | <code java> | ||
+ | when(LocalDateTime.from(Mockito.any())).thenCallRealMethod(); | ||
+ | </ | ||
+ | ===== mockConstruction ===== | ||
+ | * 생성자 mocking | ||
+ | * 항상 '' | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | | ||
+ | try (MockedConstruction mocked = mockConstruction(Foo.class)) { | ||
+ | Foo foo = new Foo(); | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== 참고 ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// |