Получение NullPointerException, когда я пытаюсь смоделировать метод, и у этого метода есть локальная переменная с новым классом.Пробовал по-другому, но не повезло.Пожалуйста, смотрите комментарии, я упомянул то, что я пробовал и где я получаю исключение.
Заранее спасибо!
@RunWith(PowerMockRunner.class)
@PrepareForTest(StudentController.class)
public class StudentControllerTest {
@Mock
HttpServletRequest request;
@Mock
StudentService studentService;
@InjectMocks
StudentController studentController;
@Test
public void create() {
Student student =mock(Student.class);
**// Also tried Student student = new Student();**
student.setName("Name");
student.setAddress("New York");
when(studentService.create(student)).thenReturn(student);
// if I try below code I am getting compile error - Type mismatch: cannot convert from Matcher<Student> to Student
//when(studentService.create(any(Student.class))).thenReturn(student);
Student createdStudent= studentController("Name", "New York", 1);
assertTrue(0 < createdStudent.getStudentId())
}
}
Studentcontroller.java
@PostMapping("/api/student/create")
public Student create(HttpServletRequest request, @RequestParam("name") String name, @RequestParam("address") String address, @RequestParam("grade") String grade) {
Student student = new Student();
try {
student.setName(name);
student.setAddress(address);
student.setGrade(Integer.decode(grade));
student = studentService.create(student);
**// Throwing NullPointer in this line. I did dubug and can see student returned is null**
message = "Successfully Created Student[" + student.getId() + "] " + name;
} catch (Exception e) {
message = "Exception while create the student: " + name;
log.error(message + "\n" + StackTraceUtil.getStackTrace(e));
student.setErrorMessage(message);
}
return student;
}
РЕШЕНИЕ:
Я использовал org.hamcrest.CoreMatchers.any
Это дает ошибку компиляции Type mismatch: cannot convert from Matcher<Student> to Student
Теперь я изменил его на org.mockito.ArgumentMatcher.any
Вы можете выбрать одиниз ниже двух.Оба будут работать.
Ключ импортировал org.mockito.ArgumentMatcher.any
Student student =mock(Student.class);
student.setName("Name");
student.setAddress("New York");
ИЛИ
Student student = new Student();
student.setName("Name");
student.setAddress("New York");