사용자 도구

사이트 도구


java:mockito

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:mockito [2016/06/09 12:13]
kwon37xi
java:mockito [2023/11/30 14:17] (현재)
kwon37xi [mockStatic]
줄 1: 줄 1:
 ====== Mockito ====== ====== Mockito ======
-  * [[http://code.google.com/p/mockito/|Mockito]] +  * [[https://github.com/mockito/mockito|Mockito]] 
-  * [[http://refcardz.dzone.com/refcardz/mockito#refcard-download-social-buttons-display|Mockito RefCard]]+  * https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html 
 +  * [[https://dzone.com/refcardz/mockito|Mockito RefCard]]
   * [[https://examples.javacodegeeks.com/core-java/mockito/mockito-tutorial-beginners/|Mockito Tutorial for beginners]]   * [[https://examples.javacodegeeks.com/core-java/mockito/mockito-tutorial-beginners/|Mockito Tutorial for beginners]]
  
-====== argThat ======+===== argThat =====
 ''argThat''과 [[http://mockito.github.io/mockito/docs/current/org/mockito/ArgumentMatcher.html|ArgumentMatcher]]를 조합하여 동적인 인자 비교가 가능하다. ''when''과 ''verify''에서 모두 사용가능하다. ''argThat''과 [[http://mockito.github.io/mockito/docs/current/org/mockito/ArgumentMatcher.html|ArgumentMatcher]]를 조합하여 동적인 인자 비교가 가능하다. ''when''과 ''verify''에서 모두 사용가능하다.
  
줄 43: 줄 44:
 </code> </code>
  
-====== initMocks ======+===== ArgumentCaptor ===== 
 +  * [[https://www.baeldung.com/mockito-argumentcaptor|Using Mockito ArgumentCaptor | Baeldung]] 
 + 
 +<code java> 
 +// MockitoRunner 사용시 
 +@Captor 
 +ArgumentCaptor<MyClass> myClassCaptor; 
 + 
 +// 코드로 직접 지정 
 +ArgumentCaptor<MyClass> myClassCaptor = ArgumentCaptor.forClass(MyClass.class); 
 +</code> 
 +===== initMocks =====
   * [[https://examples.javacodegeeks.com/core-java/mockito/initializing-mockito-with-initmocks/|Initializing Mockito with InitMocks]]   * [[https://examples.javacodegeeks.com/core-java/mockito/initializing-mockito-with-initmocks/|Initializing Mockito with InitMocks]]
   * ''@RunWIth''없이 일괄 ''@Mock'' 객체 생성하기   * ''@RunWIth''없이 일괄 ''@Mock'' 객체 생성하기
줄 61: 줄 73:
 </code> </code>
  
 +===== JUnit 5 =====
 +  * [[java:junit:5|JUnit 5]]와 함께 사용.
 +  * [[https://www.baeldung.com/mockito-junit-5-extension|Mockito and JUnit 5 - Using ExtendWith | Baeldung]]
 +
 +<code java>
 +@ExtendWith(MockitoExtension.class)
 +class UserServiceTest {
 +    @Mockito ...
 +}
 +
 +// Strictness 를 설정하려면 아래 추가. default가 STRICT_STUBS임. LENIENT 로 변경하기
 +@MockitoSettings(strictness = Strictness.LENIENT)
 +</code>
 +  * ''LENIENT''는 좋지 잘못된 stub 을 만들고 있다는 의미가 되므로 가급적 ''STRICT_STUB''(기본값)을 유지할것.
 +===== mockStatic =====
 +  * Mockito ''3.4.0'' 이상 버전 지원
 +  * static method mocking. 특히 ''LocalDateTime.now()'' 테스트 등에 좋다.
 +  * [[https://www.baeldung.com/mockito-mock-static-methods|Mocking Static Methods With Mockito | Baeldung]]
 +  * 항상 ''try-with-resources''로 감싸서 할 것.
 +
 +
 +<code java>
 +import static org.mockito.Mockito.mockStatic;
 +
 +assertEquals("foo", Foo.method());
 +try (MockedStatic<Foo> mocked = mockStatic(Foo.class)) {
 +    mocked.when(Foo::method).thenReturn("bar");
 +    // 혹은 Mockito.when(Foo.method()).thenReturn("bar");
 +    assertEquals("bar", Foo.method());
 +    mocked.verify(Foo::method);
 +}
 +assertEquals("foo", Foo.method());
 +</code>
 +  * 만약 mocking 할 필요가 없는 다른 static method가 호출된다면 실제 코드를 호출하게 명시적으로 지정해야 한다.
 +<code java>
 +when(LocalDateTime.from(Mockito.any())).thenCallRealMethod();
 +</code>
 +===== mockConstruction =====
 +  * 생성자 mocking
 +  * 항상 ''try-with-resources''로 감싸서 할 것.
 +
 +
 +<code java>
 + assertEquals("foo", new Foo().method());
 + try (MockedConstruction mocked = mockConstruction(Foo.class)) {
 + Foo foo = new Foo();
 + when(foo.method()).thenReturn("bar");
 + assertEquals("bar", foo.method());
 + verify(foo).method();
 + }
 + assertEquals("foo", new Foo().method());
 + 
 +</code>
  
 ===== 참고 ===== ===== 참고 =====
줄 66: 줄 131:
   * [[http://www.javacodegeeks.com/2015/11/testing-with-mockito.html|Mockito Tutorial: Testing and Mocking with Mockito]]   * [[http://www.javacodegeeks.com/2015/11/testing-with-mockito.html|Mockito Tutorial: Testing and Mocking with Mockito]]
   * [[http://www.javacodegeeks.com/2015/12/using-mockito-without-static-imports-java-8.html|Using Mockito without static imports with Java 8]]   * [[http://www.javacodegeeks.com/2015/12/using-mockito-without-static-imports-java-8.html|Using Mockito without static imports with Java 8]]
 +  * [[https://www.baeldung.com/mockito-core-vs-mockito-all|The Difference Between mockito-core and mockito-all | Baeldung]]
 +  * [[https://www.baeldung.com/mockito-spy|Mockito using Spy]]
 +  * [[https://www.baeldung.com/mockito-argument-matchers|Mockito ArgumentMatchers | Baeldung]]
 +  * [[https://www.baeldung.com/mockito-mock-static-methods|Mocking Static Methods With Mockito | Baeldung]]
 +  * [[https://www.baeldung.com/java-override-system-time|Overriding System Time for Testing in Java | Baeldung]]
java/mockito.1465443832.txt.gz · 마지막으로 수정됨: 2016/06/09 12:13 (바깥 편집)