spring - Junit mockito when(..).thenReturn() NullPointerException
问题描述
我正在将单元测试写入 Class_b 并由于 when().thenReturn() 而出现空指针异常。通过调试器找到它。任何帮助都将是可观的。
@Component
Class_b{
@Autowired
private Class_a class_a;
fun_b(par){
result = class_a.fun_a()
// uses result and returns
}
}
@Component
Class_a{
fun_a(par){
// Some logic
returns;
}
}
@Runner
Class_b_Test{
@InjectMocks
private Class_b class_b;
@Mock
private Class_a class_a;
@Test
fun_testing(){
when(class_a.fun_a(par)).thenReturn(something)
result = class_b.fun_b(par)
// Does validation
}
}
解决方案
您正在测试 Spring Boot 应用程序吗?
如果您正在测试 Spring Boot 应用程序,您应该向测试类添加 3 个注释(JUnit 5 的示例):
@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
他们将使用您的 bean 初始化 Spring 上下文。
@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
class Class_b_Test {
@InjectMocks
private Class_b class_b;
@Mock
private Class_a class_a;
@Test
void fun_b() {
when(class_a.fun_a()).thenReturn("");
class_b.fun_b();
}
}
===============================================
根据评论更新:
当我添加Class_a.class
到@SpringBootTest
类似的
@SpringBootTest(classes = {Class_b.class,Class_a.class})
这个测试已经通过了。
我正在测试这个依赖项
<properties>
<powermock.version>2.0.2</powermock.version>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
推荐阅读
- git - 使用 sshfs 在 Linux 服务器上设置 git repo
- arrays - 如何在枚举器 Swift 中使用 contains(where:)
- c# - 改变财产的价值
- flutter - 从 Provider 迁移到 Riverpod
- mysql - sql.Query 被截断或不完整的结果
- powershell - 使用 {来自快捷方式/.lnk 的常用外观/外观数据} 运行 powershell 脚本
- laravel - 带有外部 URL 的 Laravel putFileAs 不起作用
- sql - 通过在 SQL 中使用前导零填充来格式化字符串
- java - 类加载器如何在 jvm 具有相同名称但不同版本的 jar 的情况下工作,哪个将在运行时加载或两者都将加载?
- typescript - vscode 会忽略类型声明,直到我导航到 .d.ts 文件并保存它