Spring 引导 JUnit 5 测试因空指针而失败

Spring Boot JUnit 5 test failing with null pointer

我得到

java.lang.NoSuchMethodError: org.junit.jupiter.api.extension.ExtensionContext.getRequiredTestInstances()Lorg/junit/jupiter/api/extension/TestInstances; 在 org.mockito.junit.jupiter.MockitoExtension.beforeEach(MockitoExtension.java:143) 在 org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$null$0(TestMethodTestDescriptor.java:126) 在 org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)

以下代码错误。

运行 下面的代码作为 junit 测试的正确方法是什么?

package com.safnas.unittesting.unittesting.business;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

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

import com.safnas.unittesting.unittesting.data.SomeDataService;

@ExtendWith(MockitoExtension.class)
class SomeBusinessMockTest {
    
    @InjectMocks
    SomeBusinessImpl business = new SomeBusinessImpl();
    
    @Mock
    SomeDataService dataServiceMock;
    
    @Test
    void calculateSumUsingDataService_basic() {
        when(dataServiceMock.retrieveAllData()).thenReturn(new int[] {1,2,3});
        assertEquals(6, business.calculateSumUsingDataService());
    }
    
    @Test
    void calculateSum_empty() {
        when(dataServiceMock.retrieveAllData()).thenReturn(new int[] {});
        assertEquals(0, business.calculateSumUsingDataService());
    }
    
    @Test
    void calculateSum_oneValue() {
        when(dataServiceMock.retrieveAllData()).thenReturn(new int[] {5});
        assertEquals(5, business.calculateSumUsingDataService());
    }

}

我删除了@ExtendWith(MockitoExtension.class) 并在下面使用

@BeforeEach

void beforeEach() {

MockitoAnnotations.openMocks(this);

}

效果很好

根据 javadocs

可自动关闭org.mockito.MockitoAnnotations.openMocks(对象测试类)

为给定的 testClass 初始化使用 Mockito 注释注释的对象:@org.mockito.Mock、@Spy、@Captor、@InjectMocks

请参阅 javadoc 中有关 MockitoAnnotations 的示例 class。 Parameters:testClass Returns:A 完成 testClass 中的任何测试时可关闭。

再观察一次。

没有任何变化,我原来的问题是在 intelliJ 中工作

eclipse 似乎只是有问题