У меня есть запечатанный класс, который содержит объект с методом, который мне нужно смоделировать.Я попытался использовать Powermock для этого, но метод не поддразнивается (любые вызовы в тесте просто вызывают оригинальный метод).Вот пример закрытого класса:
sealed class UseCase<in P> {
operator fun invoke(parameters: P): Flowable<Result> {
return execute(parameters)
}
object GetQuestions : UseCase<GetQuestionsParams>() {
override fun execute(params: GetQuestionsParams): Flowable<Result> {
return Api.getQuestions()
.subscribeOn(Schedulers.io())
.map { Result.create(it) }
}
}
}
И тестовый класс:
@RunWith(PowerMockRunner::class)
@PrepareForTest(UseCase::class, UseCase.GetQuestions::class)
class QuestionsPresenterTest {
private val presenter = QuestionsPresenter()
@Before
fun setUp() {
initMocks(this)
PowerMockito.mockStatic(UseCase::class.java)
PowerMockito.mockStatic(UseCase.GetQuestions::class.java)
}
@Test
fun `test getQuestions with error response`() {
PowerMockito.`when`(UseCase.GetQuestions.invoke(any())) doReturn Flowable.error(IllegalArgumentException("test error"))
presenter.getQuestions()
//...verification etc
}
}
К сожалению, когда я запускаю это, я либо получаю исключения нулевого указателя вокруг внутренних частей этого PowerMockito. when
вызывать, если я использую реальное значение в вызове вместо сопоставления any () или IllegalArgumentException, описанного как «Обнаружен неуместный или неправильно использованный сопоставитель аргументов», если я использую сопоставление any (), которое предполагает, что ничего не было смоделировановообще и настоящая функция вызывается.У кого-нибудь есть идеи?