ExpectNew не вызывается дважды для одного и того же класса

#java #mocking #powermock #easymock

#java #издевательство #powermock #easymock

Вопрос:

Я писал тест junit с использованием EasyMock.Итак, для объекта :-

 DataProvider dataProvider = new DataProvider(Data data , Provider provider);
  

Поэтому мне пришлось дважды имитировать поведение, например :-

 @Mock
DataProvider dataProvider1 , dataProvider2;
  
    1. PowerMock.expectNew(DataProvider.class, dataRequest, provider1).thenReturn(mockDataProvider1);
   2. PowerMock.replay(DataProvider.class);
   3. PowerMock.expectNew(DataProvider.class, dataRequest, provider2).thneReturn(mockDataProvider2);
   4. PowerMock.replay(DataProvider.class);
  

Но когда я пытаюсь выполнить это. это выдает ошибку в строке номер 2.
Когда я удалил строки 3 и 4, это удалось без каких-либо проблем.

и мне нужно использовать его дважды в моем поведении. Может кто-нибудь, пожалуйста, помочь?

Комментарии:

1. Можете ли вы привести полный тестовый пример. С помощью @Prepare и ошибки

Ответ №1:

метод replay() не должен вызываться дважды для одного и того же класса в одном и том же методе тестирования.

итак :-

    1. PowerMock.expectNew(DataProvider.class, dataRequest, provider1).thenReturn(mockDataProvider1);
   3. PowerMock.expectNew(DataProvider.class, dataRequest, provider2).thneReturn(mockDataProvider2);
   4. PowerMock.replay(DataProvider.class);
  

Это сработало.

То же предложение и для функции mockStatic() .

Следует также помнить, что следует использовать функцию mockStatic() только один раз для класса в одном методе тестирования. итак :-

 PowerMock.mockStatic(DataProvider.class);
  

Это должно использоваться только один раз в тестовом методе.