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 似乎只是有问题
我得到
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 似乎只是有问题