Метод внутри «Когда» на самом деле вызывается - PullRequest
0 голосов
/ 18 февраля 2020

Когда я тестирую класс A (TestNG), который использует некоторые методы из какого-либо другого вспомогательного класса, я высмеиваю вспомогательный класс (Mockito) для тестирования класса A. но когда (helper.methodUsedByClassA (value)). ThenReturn ( new HashMap> ()) эта строка кода фактически вызывает helper.methodUsedByClassA, и генерируется исключение нулевого указателя (поскольку данные, которые я использую для тестирования, недопустимы)

почему это происходит? Почему имя метода внутри mockito «когда» действительно вызывается?

class ATest{

@Mock
private Helper helper;

private A target;

@BeforeTest
public void setUp() {
        MockitoAnnotations.initMocks(this);
        this.target = new UpdateDigicatKdpAsinUtil(helper);
}


@Test(dataProvider = "data")
public void testMethod(List<String> value) {

    when(helper.methodUsedByClassA(value)).thenReturn(new HashMap<String, List<String>>({{put("test", new ArrayList<>())}}));

}


@DataProvider
public Object[][] data(){
List<String> list = new ArrayList<>();
   return new Object[][]
   {

     {list}

   }

}

class Helper{

     public Map<String, List<String>> methoUsedByClassA(int value) {
          //This method is being executed because it is mentioned inside "when"
}



}

1 Ответ

0 голосов
/ 18 февраля 2020

Полагаю, вы получаете NPE, потому что помощник имеет значение NULL.

Проблема в том, что аннотация @Mock не обрабатывается и из-за этого переменная помощника не инициализируется.

Вы должны аннотировать тестовый класс с помощью @RunWith (MockitoJUnitRunner.class). MockitoJUnitRunner обработает аннотацию @Mock и создаст макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...