首页 > 解决方案 > 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
   }
}

标签: springjunitmocking

解决方案


您正在测试 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>

推荐阅读