programing

JUnit5에서 Mockito를 사용하는 방법

prostudy 2022. 6. 10. 21:28
반응형

JUnit5에서 Mockito를 사용하는 방법

Mockito와 JUnit 5에서는 어떻게 주입을 사용할 수 있습니까?

JUnit4에서는 그냥...@RunWith(MockitoJUnitRunner.class)주석JUnit5에서는 아니요@RunWith주석?

Mockito를 사용하는 방법에는 여러 가지가 있습니다. 하나씩 살펴보겠습니다.

수동

를 사용하여 수동으로 mock을 작성하는 것은 JUnit 버전(또는 테스트 프레임워크)에 관계없이 동작합니다.

주석 기반

@Mock 주석 및 대응하는 콜을 사용하여 Mock을 작성하는 것은 JUnit 버전에 관계없이 동작합니다(또는 테스트 프레임워크에 대해서는 테스트코드가 모듈에 들어가 있는지 여부에 따라 Java 9가 여기서 간섭할 수 있습니다).

모키토 내선번호

JUnit 5는 강력한 확장 모델을 가지고 있으며, Mockito는 최근 group / 아티팩트 ID org.mockito : mockito-juppiter로 확장 모델을 발표했습니다.

확장자는 다음을 추가하여 적용할 수 있습니다.@ExtendWith(MockitoExtension.class)테스트 클래스로 이동하여 조롱된 필드에 주석을 붙입니다.@Mock.부터MockitoExtension의 Java Doc:

@ExtendWith(MockitoExtension.class)
public class ExampleTest {

    @Mock
    private List list;

    @Test
    public void shouldDoSomething() {
        list.add(100);
    }

}

Mockito Extension 문서에서는 예를 들어 컨스트럭터 주입(테스트클래스의 최종 필드를 고속으로 전송하는 경우) 등 모크를 인스턴스화하는 다른 방법에 대해 설명합니다.

규칙도 없고 주자도 없다

JUnit 5에서는 JUnit 4의 규칙과 주자가 기능하지 않기 때문에 및 Mockito 주자는 사용할 수 없습니다.

Mockito를 사용합니다.확장이 새 아티팩트에 포함되어 있습니다.mockito-junit-jupiter:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>2.23.4</version>
    <scope>test</scope>
</dependency>

JUnit 4와 같은 테스트를 작성할 수 있습니다.

import org.mockito.junit.jupiter.MockitoExtension;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;

@ExtendWith(MockitoExtension.class)
class MyTest {

    @Mock
    private Foo foo;

    @InjectMocks
    private Bar bar; // constructor injection

    ...
}

다양한 방법이 있지만 보다 깔끔한 방법 그리고 JUnit 5의 철학을 존중하는 것은 새로운 방법을 만드는 것입니다.org.junit.jupiter.api.extension.Extension모키토를 위해서.

1) mock을 수동으로 작성하면 프레임워크를 올바르게 사용할 수 있도록 추가 Mockito 체크의 이점이 없어집니다.

2) 호출MockitoAnnotations.initMocks(this)모든 시험 수업에서 우리가 피할 수 있는 보일러 플레이트 코드입니다.
그리고 추상적인 클래스에서 이 설정을 하는 것도 좋은 해결책이 아닙니다.
모든 테스트 클래스를 기본 클래스에 결합합니다.
적절한 이유로 새로운 베이스 테스트클래스가 필요한 경우 3레벨 클래스 계층으로 종료합니다.당신은 그것을 피하세요.

3) 테스트 규칙은 JUnit 4의 특수성입니다.
그런 생각은 하지도 마세요.
문서에서는 이에 대해 명확하게 설명하고 있습니다.

단, JUnit 5의 새로운 확장을 개발하려면 JUnit 4의 규칙 기반 모델이 아닌 JUnit Jupiter의 새로운 확장 모델을 사용하십시오.

Test 5.4) JUnit 5의 Test Runner를 확장하는 방법은 아닙니다.
JUnit 5 JUnit 5 Extensions ju ju 、 JUnit 4 Runners 。
그런 생각은 하지도 마세요.

★★★★★★★★★★★★★★★★★★★org.junit.jupiter.api.extension.Extension길.


편집 : 실제로 Mockito는 주피터 확장을 번들합니다.

사용법은 매우 간단합니다.

import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class FooTest {
     ...    
}

여기 조나단의 훌륭한 답변이 추가되어 있습니다.

로서 「」를 으로써,mockito-junit-jupiter, 사용방법@ExtendWith(MockitoExtension.class)시 과 같은 합니다.

java.displaces를 클릭합니다.NoSchMethodError: org.junit.platform.commons.지지하다.Annotation Support.find Annotation (Ljava/util/옵션)Ljava/lang/클래스;)Ljava/util/옵션;

문제는 '이렇게 하다'는 거예요.mockito-junit-jupiter두 개의 독립된 라이브러리에 의존합니다.를 들어, 「」의 경우는,mockito-junit-jupiter:2.19.0:

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>2.19.0</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-api</artifactId>
  <version>5.1.0</version>
  <scope>runtime</scope>
</dependency>

는 제가 사용했다는 입니다.junit-jupiter-api:5.0.1

★★★★로서junit-jupiter-api가 많으므로 의 API에 해야 합니다.junit-jupiter-api 그그mockito-junit-jupiter에 따라 다릅니다.

.@ExtendWith석입니니다다

안타깝게도 아직 출시된 확장자는 없습니다.github 에서는, 데모 테스트의 예로서 확장용의 베타 실장을 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/40961057/how-to-use-mockito-with-junit5

반응형