PowerMockito не высмеивает новый экземпляр, вызываемый в тестируемом классе - PullRequest
0 голосов
/ 18 июня 2019

У меня есть следующий класс, где в конструкторе я вызываю другой конструктор для создания поля класса:

public class ClassIWantToTest {
    private ClassIWantToMock anotherClass;
    public ClassIWantToTest() {
        //some stuff
        anotherClass = new ClassIWantToMock(); //<-- call constructor to build the field
        //some other stuff
    }
}

Когда я тестирую класс ClassIWantToTest, я хочу смоделировать экземплярClassIWantToMock.

Следовательно, я настроил свой тест следующим образом:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassIWantToMock.class)
public class ClassIWantToTest_Test {
    @Test
    public void myFirstTest() {
        ClassIWantToMock myMock = PowerMockito.mock(ClassIWantToMock.class);
        PowerMockito.whenNew(ClassIWantToMock.class).withAnyArguments().thenReturn(myMock); 
        ClassIWantToTest test = new ClassIWantToTest(); //<-- not mocked
    }
}

Однако в последней строке кода в тесте (где я делаю new класса Iхочу проверить), конструктор ClassIWantToMock все еще вызывается.

Я искал другие примеры переполнения стека (и в документации), но похоже, что это должно быть сделано так.Что я забыл / делаю неправильно?

1 Ответ

0 голосов
/ 18 июня 2019

Это была действительно простая ошибка.Если класс ClassIWantToMock инициализируется внутри ClassIWantToTest, то также следует подготовить ClassIWantToTest к тесту.

Я заменил это:

@PrepareForTest(ClassIWantToMock.class)

на это:

@PrepareForTest({ClassIWantToTest.class,ClassIWantToMock.class})

... и все работало нормально.

...