@Mock, @MockBean 및 Mockito.mock()의 차이점
테스트를 작성하고 의존관계를 조롱할 때 이 세 가지 접근법의 차이점은 무엇입니까?
@MockBean:
@MockBean MyService myservice;
@Mock:
@Mock MyService myservice;
Mockito.mock()
MyService myservice = Mockito.mock(MyService.class);
플레인 모키토 라이브러리
import org.mockito.Mock;
...
@Mock
MyService myservice;
그리고.
import org.mockito.Mockito;
...
MyService myservice = Mockito.mock(MyService.class);
모키토
클래스 또는 인터페이스를 조롱하고, 클래스 또는 인터페이스의 동작을 기록 및 검증할 수 있습니다.
주석을 사용하는 방법이 더 짧기 때문에 더 선호되고 더 자주 선호됩니다.
에 Mockito 하려면 Mockito 을 활성화해야 합니다.MockitoAnnotations.initMocks(this)
.static 메서드는 static입니다.
간의 각실행 전에 하는 것이 .
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
모키토 또 다른 은 모키토 주석을 사용하여 을 다는 입니다.@RunWith
「」를 .MockitoJUnitRunner
한 것들을할 수 .
@RunWith(org.mockito.runners.MockitoJUnitRunner.class)
public MyClassTest{...}
Spring Boot 라이브러리 포장 Mockito 라이브러리
이것은 실제로 Spring Boot 클래스입니다.
import org.springframework.boot.test.mock.mockito.MockBean;
...
@MockBean
MyService myservice;
는 래클 the the .spring-boot-test
★★★★★★★★★★★★★★★★★★.
할 수 .ApplicationContext
.
선언된 클래스와 호환되는 빈이 컨텍스트에 있는 경우 해당 빈이 모크로 대체됩니다.
그렇지 않은 경우 컨텍스트 내의 모크를 빈으로 추가합니다.
Javadoc 참조:
스프링 Application Context에 mock을 추가하기 위해 사용할 수 있는 주석입니다.
...
컨텍스트에서 정의된 동일한 유형의 기존 단일 빈이 모크로 대체될 경우 기존 빈이 정의되지 않은 경우 새 빈이 추가됩니다.
및 Classic/Plain Mockito @MockBean
스프링 부츠?
유닛 테스트는 컴포넌트를 다른 컴포넌트로부터 격리하여 테스트하도록 설계되어 있으며 유닛 테스트도 요건이 있습니다.이러한 테스트는 개발자 머신에서 매일 수십 번 실행될 수 있기 때문에 실행 시간 면에서 가능한 한 빠릅니다.
여기 그그결, 기기 : : : : : : : : : : : : : : : : : : : : : : : : : : : :.
Spring Boot 컨테이너에서 의존 관계가 없는 테스트를 작성할 때 클래식/플레인 Mockito를 따를 수 있습니다.그것은 빠르고 테스트 대상 컴포넌트의 분리에 유리합니다.
테스트가 스프링 부트컨테이너에 의존해야 하며 컨테이너 콩 중 하나를 추가 또는 조롱해야 하는 경우:@MockBean
Spring Boot이 그 방법입니다.
스프링 부트의 일반적인 사용법@MockBean
우리가 주석을 단 시험 수업을 작성할 때@WebMvcTest
(Web 테스트 슬라이스).
Spring Boot 매뉴얼에는 다음과 같은 내용이 정리되어 있습니다.
자주
@WebMvcTest
1개의 컨트롤러로 제한되며, 이 컨트롤러와 조합하여 사용됩니다.@MockBean
필요한 공동작업자에게 모의 구현을 제공합니다.
다음은 예를 제시하겠습니다.
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringRunner.class)
@WebMvcTest(FooController.class)
public class FooControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private FooService fooServiceMock;
@Test
public void testExample() throws Exception {
Foo mockedFoo = new Foo("one", "two");
Mockito.when(fooServiceMock.get(1))
.thenReturn(mockedFoo);
mvc.perform(get("foos/1")
.accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk())
.andExpect(content().string("one two"));
}
}
마지막으로 설명하기는 쉽다.주석의 javadoc만 살펴보면 다음과 같은 차이점을 볼 수 있습니다.
@Mock: (org.mockito.Mock
)
필드를 모의로 표시합니다.
- 속기 모의 작성을 허용합니다.
- 반복적인 모의 생성 코드를 최소화합니다.
- 테스트 클래스의 가독성을 높입니다.
- 필드 이름이 모크를 식별하는 데 사용되므로 확인 오류를 쉽게 읽을 수 있습니다.
@MockBean: (org.springframework.boot.test.mock.mockito.MockBean
)
스프링 Application Context에 mock을 추가하기 위해 사용할 수 있는 주석입니다.클래스 레벨 주석으로 사용하거나 다음 중 하나의 필드에서 사용할 수 있습니다.
@Configuration
클래스 또는 테스트클래스의@RunWith
스프링 러너Mocks 형식 또는 콩 이름에 의해 등록될 수 있다.없으면 기존의 열매는 새로 추가될 것이다 정의되어 있는 같은 유형의 컨텍스트에 정의된 모든 기존의 단일 콩 모의 고사로 대체될 것입니다.
언제
@MockBean
는 필드에서 사용되며 애플리케이션 컨텍스트에 등록됩니다.또한 이 필드에도 모크가 삽입됩니다.
Mockito.mock()
'의 일이다.
@Mock
.
언급URL:https://stackoverflow.com/questions/44200720/difference-between-mock-mockbean-and-mockito-mock
'programing' 카테고리의 다른 글
자바 이메일 주소의 가장 좋은 검증 방법은 무엇입니까? (0) | 2022.09.04 |
---|---|
"java.security.cert" 수정 방법인증서.예외:제목 대체 이름이 없습니다" 오류입니까? (0) | 2022.09.04 |
목록을 쉼표로 구분하는 가장 간단한 방법? (0) | 2022.09.04 |
알파벳 순서로 문자열 비교 (0) | 2022.09.04 |
입력/출력 스트림을 사용하는 Java 프로세스 (0) | 2022.09.04 |