Mockito 배우기 - Mockito의 Annotation 지원
Annotation 초기화
Annotation만으로는 충분하지 않으므로 초기화 작업을 수행해야 합니다.초기화 방법: MockitoAnnotations.initMocks (testClass) 매개 변수인testClass는 당신이 쓴 테스트 클래스입니다.일반적으로 Junit4의 @Before 정의 방법에서 다음과 같이 초기화 작업을 수행합니다.
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
상기 초기화 방법 외에 Mockito가 제공하는 Junit Runner: Mockito JUnit Runner를 사용하면 위의 절차를 생략할 수 있습니다.
@RunWith(MockitoJUnit44Runner.class)
public class ExampleTest {
...
}
@Mock 메모
@Mock 메모를 사용하여 mock 객체를 정의하면 다음과 같은 이점이 있습니다.
1. 모크 대상의 창설을 편리하게 한다
2. 모크 대상이 만든 중복 코드 감소
3. 테스트 코드의 가독성 향상
4. 변수 이름은 모크 대상의 표시이기 때문에 잘못 배열하기 쉽다
@Mock 메모도 사용자 정의name 및 answer 속성을 지원합니다.
다음은 공식적으로 @Mock 사용 예입니다.
public class ArticleManagerTest extends SampleBaseTestCase {
@Mock
private ArticleCalculator calculator;
@Mock(name = "dbMock")
private ArticleDatabase database;
@Mock(answer = RETURNS_MOCKS)
private UserProvider userProvider;
private ArticleManager manager;
@Before
public void setup() {
manager = new ArticleManager(userProvider, database, calculator);
}
}
public class SampleBaseTestCase {
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
}
@Spy 메모
Spy 사용 방법은 앞의 섹션을 참조하십시오. 여기서 더 이상 설명하지 않습니다. 다음은 사용 방법입니다.
public class Test{
@Spy
Foo spyOnFoo = new Foo();
@Before
public void init(){
MockitoAnnotations.initMocks(this);
}
...
}
@Captor 메모
@Captor는 매개 변수 포획기의 주석입니다. 사용법은 앞에서 설명한 바와 같이 주석을 통해 쉽게 정의할 수 있습니다.사용 예는 다음과 같습니다.
public class Test {
@Captor
ArgumentCaptor<AsyncCallback<Foo>> captor;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void shouldDoSomethingUseful() {
// ...
verify(mock.doStuff(captor.capture()));
assertEquals("foo", captor.getValue());
}
}
@InjectMocks 메모
이 주석을 통해 모크 대상을 자동으로 주입할 수 있습니다.현재 버전은 setter 방식으로만 주입할 수 있습니다. Mockito는 먼저 형식 주입을 시도합니다. 같은 종류의 mock 대상이 여러 개 있으면 이름에 따라 주입합니다.주입이 실패할 때 Mockito는 어떠한 이상도 던지지 않기 때문에 수동으로 안전성을 검증해야 할 수도 있습니다.
예:
@RunWith(MockitoJUnit44Runner.class)
public class ArticleManagerTest {
@Mock
private ArticleCalculator calculator;
@Mock
private ArticleDatabase database;
@Spy
private UserProvider userProvider = new ConsumerUserProvider();
@InjectMocks
private ArticleManager manager = new ArticleManager();
@Test
public void shouldDoSomething() {
manager.initiateArticle();
verify(database).addListener(any(ArticleListener.class));
}
}
상례에서, Article Database는 Article Manager의 속성입니다. Article Manager는 @InjectMocks에 주석을 달았기 때문에, 형식에 따라 자동으로 setter 방법을 호출하여 Article Database를 설정합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
개인 FLEX 지식 라이브러리 작업 노트[size=large]1、 이 방법은 TileWindows 팝업 창에 있습니다. TitleWindows의 maxWidth와 maxHeight를 지정하지 않으면 최대 값이 화면 전체에 깔립니다. 페이지의minHeigh...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.