Я пытаюсь использовать PowerMockito для создания шпиона класса final
, но я продолжаю получать следующую ошибку, хотя я использую метод PowerMockito spy()
вместо Mockito's :Не могу издеваться над финальным классом с помощью PowerMockito.spy()
java.lang.IllegalArgumentException: Невозможно создать подкласс конечный класс класс com.whoever.WidgetUploadClient
Мой тестовый пример выглядит примерно так:
...
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.spy;
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(RobolectricTestRunner.class)
@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"})
@PrepareForTest(WidgetUploadClient.class)
@Config(manifest=Config.NONE, sdk = 23)
public class WidgetUploadClientTest {
@Test
public void testUploadWidget() {
WidgetMarshaller mockMarshaller = mock(WidgetMarshaller.class);
WidgetUploadClient client = spy(new WidgetUploadClient(mockMarshaller)); // Exception thrown by spy()
...
}
}
Не должно быть @PrepareForTest(WidgetUploadClient.class)
и с использованием учетной записи метода PowerMockito spy()
для WidgetUploadClient
является окончательным?
Я также попробовал альтернативный подход нашел в Robolectric-х PowerMock guide: с помощью RobolectricTestRunner
или RobolectricGradleTestRunner
в качестве тест бегун (@RunWith
) с @Rule public PowerMockRule rule = new PowerMockRule()
. Когда я это делаю, тест не запускается полностью, и возникает другое исключение.
Я использую PowerMock/PowerMockito 1.6.5, Robolectric 3.1 и Java 1.8.0_91-b14.
Спасибо за ваш отзыв, Claudio. Это хороший пример использования PowerMock. Хотя, я считаю, что правильно использую PowerMock, если в моем примере не было неправильного использования, которое вы можете указать. Я считаю, что настоящая проблема заключается в использовании PowerMock специально с Robolectric. Из того, что я нашел в Интернете, я считаю, что моя проблема - ошибка в Robolectric. – spaaarky21
@ spaaarky21 Пробовал ли вы передать массив в аннотацию «PrepareForTest», как я предлагаю в своем примере? –
Это хорошая вещь, но я считаю, что только «WidgetUploadClient» должен быть подготовлен, так как это единственный «последний», в отличие от «WidgetMarshaller». – spaaarky21