我有一个密封的类,其中包含一个对象,该对象带有我需要模拟的方法。我已经尝试过使用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
}
}
不幸的是,当我运行此命令时,如果在调用中使用实数值而不是any()匹配器,或者在IllegalArgumentException中描述为“如果我使用any()匹配器,则在此处检测到错误放置或滥用的参数匹配器”,这表明根本没有嘲笑任何东西,并且正在调用真实函数。 有人有什么想法吗?