java - 使用 Mockito 存根时出现 NullPointerException
问题描述
我对 Mockito 还很陌生,但是在尝试对 Texture 类进行存根时出现 NullPointerError。这是我的测试:
import com.badlogic.gdx.graphics.Texture;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.junit.MockitoJUnitRunner;
import org.testng.annotations.BeforeMethod;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
class EntityTest {
@InjectMocks
public Texture mockedImg;
@BeforeMethod
public void setup() {
mockedImg = mock(Texture.class);
when(mockedImg.getWidth()).thenReturn(5);
when(mockedImg.getHeight()).thenReturn(5);
}
@Test
public void doesAnyOfMyCodeWork() {
Assertions.assertEquals(mockedImg.getHeight(),5);
}
}
这是我得到的错误:
java.lang.NullPointerException
at EntityTest.doesAnyOfMyCodeWork(EntityTest.java:35) <19 internal calls>
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) <9 internal calls>
at java.base/java.util.ArrayList.forEach(ArrayList.java:1540) <18 internal calls>
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
(第 35 行是Assertions.assertEquals(mockedImg.getHeight(),5);
)
任何帮助将非常感激!
解决方案
所以我现在的代码似乎如下所示:
import com.badlogic.gdx.graphics.Texture;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class EntityTest {
@Mock
public Texture mockedImg;
@Before
public void setup() {
mockedImg = mock(Texture.class);
lenient().when(mockedImg.getWidth()).thenReturn(5);
lenient().when(mockedImg.getHeight()).thenReturn(5);
}
@Test
public void doesAnyOfMyCodeWork() {
Assertions.assertEquals(mockedImg.getHeight(),5);
}
}
这真的很奇怪,因为我昨天有几乎完全相同的代码并且它引发了一大堆错误(尽管我已经将我的测试移到了可能有帮助的不同源文件夹)。感谢您帮助我解决这些问题。
推荐阅读
- c# - c# -DirectShow 中的网络摄像头模拟器/虚拟摄像头
- amazon-web-services - Amazon DynamoDB 是否支持查询结果的流式传输
- python - 形状为 (2,) 的不可广播输出操作数与广播形状 (1,2) 不匹配
- node.js - Handlebars:根据 url 禁用一些内容
- angular - 用户登录时无法从本地存储中正确获取项目
- c# - ASP .NET CORE 2.2 JWT 和声明网站的身份验证
- python - 将 JSOB 对象插入 Postgres 数据库
- linux - 从以 root 身份运行的脚本以普通用户身份运行 gtk 程序
- flutter - 颤振自动测试:点击按钮在抽屉中不起作用
- mysql - 如何使用别名显示没有错误的日期和月份 - mysql