我想测试一个抛出MyCustomException
类型异常的方法,这是我的类MyService
的一个例子。
public class MyService {
public void invoke(InvocationContext ctx) throws MyCustomException{
if(ctx == null) {
throw new MyCustomException("Parameter ctx must not be null.");
}
}
}
我想测试,如果我用assertThrows()
传递一个空值,方法是否抛出MyCustomException
。
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mockito;
import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class AxwApplicationTest {
@Spy
@InjectMocks
MyService myServiceToTest;
@Test
public void invoke_ShouldThrow_MyCustomException() {
assertThrows(MyCustomException.class, () -> {
myServiceToTest.invoke(null);
});
}
}
这个异常被抛出了,但最终是NullPointerException
,我不知道如何解决它。assertThrows
给出了以下错误:
java.lang.AssertionError: unexpected exception type thrown; expected:<com.myproject.MyCustomException> but was:<java.lang.NullPointerException>
Maven依赖项:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>4.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>4.0.0</version>
<scope>test</scope>
</dependency>
1条答案
按热度按时间nimxete21#
问题出在
@InjectMocks
和@Spy
注解上。2同时使用它们没有意义(如stackoverflow帖子中所讨论的)。3手工创建类解决了NullPointerException
问题,测试运行成功