Junit mockito когда(..).thenReturn() Исключение NullPointerException

#spring #junit #mocking

Вопрос:

Я пишу модульный тест в 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
   }
}
 

Ответ №1:

Вы тестируете приложение Spring boot?

Если вы тестируете приложение Spring boot, вам следует добавить 3 аннотации к тестовому классу (пример для JUnit 5).:

 @ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureMockMvc
 

Они инициализируют весенний контекст с вашими бобами.

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

Комментарии:

1. Да, это приложение для загрузки spring, и я использую Junit4. Это аннотации, которые я использую @SpringBootTest(классы = Class_b.class) @RunWith(PowerMockRunner.class) @PrepareForTest(Class_b.class)

2. @PawanAsipu пожалуйста, пришлите мне свою учетную запись на GitHub, и я поделюсь с вами репо с полным примером

3. @PawanAsipu это ваш аккаунт Асипу Павана Кумара? Я пригласил вас на частное репо на GitHub с полным примером