Вы можете проголосовать за меня, если хотите. Я новичок в мокито. Как использовать mockito для проверки функции абстрактного класса, который расширяет другой класс. Я пытался реализовать это ниже, но получил исключение nullPointerException. Я знаю, что вы не должны использовать реферат, подобный этому, но это старый код, разработанный старой командой, и мне нужно проверить свою функцию. Если нет возможности, дайте мне знать.

Я видел пример в

Класс тестирования, расширяющий абстрактный класс

public abstract class AbstractClass implements SomeInterface  {

    protected final WebServiceClient webServiceClient;

    protected final AnotherWebServiceClient anotherWebServiceClient;


    public BaseParser(
            WebServiceClient webServiceClient,
           AnotherWebServiceClient anotherWebServiceClient
    ) {
        this.webServiceClient = webServiceClient;
        this.anotherWebServiceClient = anotherWebServiceClient;
    }

 public functionToTest(String msg) {
        System.out.println(msg)
    }

Мой тест

@InjectMocks
@Spy
private AbstractClass aClass;

@Test
public void testSave() {
    AbstractClass spy = Mockito.spy(aClass);
    Mockito.doNothing().when((SomeInterface) spy).getId();
    spy.functionToTest(any());
    verify(spy).functionToTest(any());
}
-2
Arthur Decker 26 Ноя 2019 в 20:51
Вы могли бы спросить себя, имеет ли смысл тестировать абстрактный класс?
 – 
D. Lawrence
26 Ноя 2019 в 20:54
@ Д.Лоуренс, я знаю, в этом нет смысла. Но так код писал старый разработчик. Я просто исправляю ошибку, и мне нужна помощь, чтобы проверить, работает ли исправление должным образом. Вы можете голосовать против меня сколько угодно раз, но мне просто нужно это проверить.
 – 
Arthur Decker
26 Ноя 2019 в 20:55
2
Возможно, вам стоит начать с создания экземпляра класса, расширяющего ваш абстрактный класс. Затем, если вы хотите внедрить mock-объекты в свой класс, вам необходимо их определить. В этом случае вам понадобятся два мока: webServiceClient, anotherWebServiceClient. Попробуйте отладить свой тест, чтобы убедиться, что все ваши атрибуты установлены правильно. Также обратите внимание, что @spy эквивалентно Mockito.spy(...)
 – 
D. Lawrence
26 Ноя 2019 в 20:59
@ Д.Лоуренс, позволь мне попробовать
 – 
Arthur Decker
26 Ноя 2019 в 21:01

1 ответ

Вы можете написать анонимную реализацию этого абстрактного класса в своем тестовом примере и протестировать этот класс, предоставляя метод. Таким образом, вы вносите минимальное изменение в тестируемый код полностью в тестовом коде (таким образом, это не влияет на производственный код).

2
Nicktar 26 Ноя 2019 в 22:26