【问题标题】:Junit mockito when(..).thenReturn() NullPointerExceptionJunit mockito when(..).thenReturn() NullPointerException
【发布时间】:2021-08-31 13:26:27
【问题描述】:

我正在将单元测试写入 Class_b 并由于 when().thenReturn() 而出现 Null 指针异常。通过调试器找到它。任何帮助都将不胜感激。

@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 junit mocking


    【解决方案1】:

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

    【讨论】:

    • 是的,这是一个 Spring Boot 应用程序,我正在使用 Junit4 这些是我正在使用的注释 @SpringBootTest(classes = Class_b.class) @RunWith(PowerMockRunner.class) @PrepareForTest(Class_b.class )
    • @PawanAsipu 请将您的 GitHub 帐户发送给我,我将与您分享完整示例的 repo
    • @PawanAsipu 这是您的帐户 Asipu Pawan Kumar 吗?我已邀请您访问 GitHub 上的私人仓库并提供完整示例
    猜你喜欢
    • 1970-01-01
    • 2020-09-11
    • 2020-02-23
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多