Mockito mock NullPointerException, не знаю, что еще можно попробовать - PullRequest
0 голосов
/ 29 апреля 2020

Java думает, что мой поддельный объект класса Course равен нулю в строке, когда (). ThenReturn ().

class StudentTest {

    @Mock
    Course courseMock1;      

    @Test
    void student_getTeacherNames_should_return_list_of_full_names() {    
        when(courseMock1.getEAP()).thenReturn(1);
    }


public class Course {
    public Course(String courseName, String name, LocalDate startDate, LocalDate endDate, Integer EAP, Teacher teacher) {
        this.courseName = courseName;
        this.name = name;
        this.startDate = startDate;
        this.endDate = endDate;
        this.EAP = EAP;
        this.teacher = teacher;
    }
    public Integer getEAP() {
        return EAP;
    }
}

Я пробовал:

@RunWith(MockitoJUnitRunner.class)
class StudentTest{...

-

@Before
public void setup(){
    MockitoAnnotations.initMocks(this);
}

-

@Rule public Mocks mocks = new Mocks(this);

, ни один из которых не решает NPE.

Также пробовал (с использованием в качестве одного из параметров объекта-учителя)

@Mock
Course courseMock1 = new Course(params..);

, что привело к: MissingMethodInvocationException: когда () требуется аргумент, который должен быть «вызовом метода для макета»

Ответы [ 3 ]

0 голосов
/ 29 апреля 2020

Какой тестовый фреймворк вы используете? junit 4 или junit 5?

Если junit5, то тестовый класс должен быть помечен @ExtendWith(MockitoExtension.class)

Альтернативой может быть использование только кода (без использования аннотации). Код станет

class StudentTest {
    Course courseMock1 = Mockito.mock(Course.class);
    ...
}
0 голосов
/ 29 апреля 2020

Для использования аннотаций @Mock необходимо импортировать org.mockito.MockitoAnnotations; и вызвать MockitoAnnotations.initMocks. Обратите внимание, что метод должен вызываться перед каждым тестом.

@BeforeEach
void setup() {
    MockitoAnnotations.initMocks(this);
}

Я по ошибке использовал @Before вместо @ Before Each

0 голосов
/ 29 апреля 2020

Аннотировать StudentTest класс с @RunWith(MockitoJUnitRunner.class).

Объявить StudentTest класс как public.

Объявить student_getTeacherNames_should_return_list_of_full_names метод как public.

Запустите тестовый класс.

@RunWith(MockitoJUnitRunner.class)
public class StudentTest {

    @Mock
    Course courseMock1;      

    @Test
    public void student_getTeacherNames_should_return_list_of_full_names() {    
        Mockito.when(courseMock1.getEAP()).thenReturn(1);
        assertThat(courseMock1.getEAP()).isEqualTo(1);
    }
}
...