programing

@Mock, @MockBean 및 Mockito.mock()의 차이점

prostudy 2022. 9. 4. 12:01
반응형

@Mock, @MockBean 및 Mockito.mock()의 차이점

테스트를 작성하고 의존관계를 조롱할 때 이 세 가지 접근법의 차이점은 무엇입니까?

  1. @MockBean:

    @MockBean
    MyService myservice;
    
  2. @Mock:

    @Mock
    MyService myservice;
    
  3. 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를 따를 수 있습니다.그것은 빠르고 테스트 대상 컴포넌트의 분리에 유리합니다.
테스트가 스프링 부트컨테이너에 의존해야 하며 컨테이너 콩 중 하나를 추가 또는 조롱해야 하는 경우:@MockBeanSpring Boot이 그 방법입니다.


스프링 부트의 일반적인 사용법@MockBean

우리가 주석을 단 시험 수업을 작성할 때@WebMvcTest(Web 테스트 슬라이스).

Spring Boot 매뉴얼에는 다음과 같은 내용이 정리되어 있습니다.

자주@WebMvcTest1개의 컨트롤러로 제한되며, 이 컨트롤러와 조합하여 사용됩니다.@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

반응형