#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 с полным примером