У меня есть простой тестовый пример, для которого я использую Mockito в приложении весенней загрузки.
userOperation.java
...
@Autowired
Validator nameValidator;
private boolean userOperation(String name) {
NameStats nameStats = nameValidator.validate(name);
if (!nameStats.isSuccess()) {
throw new Exception();
}
return true;
}
...
Validator.java
public NameStats validate(String name)
{
NameStats nameStats = new NameStats();
// code goes here
return nameStats;
}
testCase.java
...
@SpringBootTest
@RunWith(SpringRunner.class)
public class ImportFileOperationTest {
@Mock
Validator nameValidator;
@Mock
NameStats nameStats;
@InjectMocks
UserOperation operation;
@Test
public void ConnectorDelegate0Test() {
Mockito.when(nameValidator.validate(any(String.class))).thenReturn(nameStats);
Mockito.when(nameStats.isSuccess()).thenReturn(true);
operation.userOperation(restConsumerRequest);
}
}
...
Ошибка:
Для приведенного выше теста я получаю исключение NullPointerException.
Во время трассировки я обнаружил, что ниже строка кода в тесте возвращает нулевое значение.
Mockito.when(nameValidator.validate(any(String.class))).thenReturn(nameStats);
Из-за нулевого значения, когда он пытается вызвать nameStats.isSuccess()
, он выбрасывает nullpointexception, даже если я смоделировал ответ на эту функцию как true
.
Вопрос:
1. Правильно ли я высмеиваю ответ?
2. Почему насмешная функция возвращает нулевой объект?
Обновление:
testCase.java
@SpringBootTest
@RunWith(SpringRunner.class)
public class ImportFileOperationTest {
@MockBean
Validator nameValidator;
NameStats nameStats;
@InjectMocks
@Resource
UserOperation operation;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void ConnectorDelegate0Test() {
nameStats = new nameStats();
Mockito.when(nameValidator.validate(any(String.class))).thenReturn(nameStats);
Mockito.when(nameStats.isSuccess()).thenReturn(true);
operation.userOperation(restConsumerRequest);
}
}
Я пытался создать объект nameStats
вручную и ожидал, что функция validate
возвратит этот объект, но все равно он возвращает null
.
Любая помощь будет оценена.