无法模拟Kotlin密封对象方法

时间:2018-10-15 16:40:57

标签: android kotlin mockito powermock powermockito

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

0 个答案:

没有答案