Mockito 2 + Junit 5 NoSuchMethodError on AnnotationSupport.findAnnotation - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь интегрировать JUnit 5 в Eclipse Oxygen3.У проекта уже есть Mockito 2.

Я выполнил все шаги, предложенные в https://www.baeldung.com/mockito-junit-5-extension, примерно так:

Зависимости:

  • junit-jupiter-двигатель 5.5.0
  • junit-jupiter-api 5.5.0
  • junit-vintage-engine 5.5.0
  • junit-платформа-бегун 1.5.0
  • mockito-core 2.28.2
  • mockito-junit-jupiter 2.28.2

Код:

public class Jupiter {

    public boolean isAlpha() {
        return true;
    }

}

Код теста:

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given; 
import java.util.Date;  
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
@RunWith(JUnitPlatform.class)
public class JupiterTest {

    @InjectMocks
    private Jupiter jupiter;

    @BeforeEach
    public void setup() {
        //usually some stuff here
    }

    @Test
    @DisplayName("heading jupiter - make it so")
    public void test() {
        boolean result = jupiter.isAlpha();

        assertThat(result).isTrue();
    }
}

К сожалению, запуск тестов не удался.

Кто-нибудь сталкивался с подобной проблемой?Это что-то общее или проблема моего проекта?

java.lang.NoSuchMethodError: org.junit.platform.commons.support.AnnotationSupport.findAnnotation(Ljava/util/Optional;Ljava/lang/Class;)Ljava/util/Optional;
    at org.mockito.junit.jupiter.MockitoExtension.retrieveAnnotationFromTestClasses(MockitoExtension.java:178)
    at org.mockito.junit.jupiter.MockitoExtension.beforeEach(MockitoExtension.java:160)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$null$0(TestMethodTestDescriptor.java:126)
...
Suppressed: java.lang.NullPointerException
    at org.mockito.junit.jupiter.MockitoExtension.afterEach(MockitoExtension.java:214)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$null$11(TestMethodTestDescriptor.java:214)
    at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:226)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:224)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachCallbacks(TestMethodTestDescriptor.java:213)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:116)
    ... 43 more

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Не уверен, зачем нужны все эти винтажные и платформенные вещи ... Ваши тесты org.junit.jupiter.api.Test;

Я бы сделал это:

1) Удалить все аннотацииот уровня класса

2) Инициал Моцкито:

@BeforeEach
public void setup() {
    MockitoAnnotations.initMocks(this);
}

3) Этих отрядов должно быть достаточно:

junit-jupiter 5.5.0
mockito-core 2.28.2
0 голосов
/ 05 июля 2019

mockito-junit-jupiter 2.28.2 позволяет вам использовать этот способ, это может решить вашу проблему.

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoSettings;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.quality.Strictness.LENIENT;

@MockitoSettings(strictness = LENIENT)
public class JupiterTest {

   @InjectMocks
   private Jupiter jupiter;

   @BeforeEach
   public void setup() {
      //usually some stuff here
   }

   @Test
   @DisplayName("heading jupiter - make it so")
   public void test() {
      boolean result = jupiter.isAlpha();

      assertThat(result).isTrue();
   }
}
...