【发布时间】:2016-06-30 16:26:45
【问题描述】:
我正在学习使用 Mockito 和 Robolectric 在 Android 上进行测试。我使用 Clean Architecture 在 Kotlin 中使用 RxJava 和 Dagger2 创建了非常简单的应用程序。一切都在设备上运行良好,但我无法通过测试。这是我的 LoginPresenterTest:
@RunWith(RobolectricGradleTestRunner::class)
@Config(constants = BuildConfig::class)
public class LoginPresenterTest {
private lateinit var loginPresenter: LoginPresenter
@Rule @JvmField
public val mockitoRule: MockitoRule = MockitoJUnit.rule()
@Mock
private lateinit var mockContext: Context
@Mock
private lateinit var mockLoginUseCase: LoginUseCase
@Mock
private lateinit var mockLoginView: LoginView
@Mock
private lateinit var mockCredentialsUseCase: GetCredentials
@Before
public fun setUp() {
loginPresenter = LoginPresenter(mockCredentialsUseCase, mockLoginUseCase)
loginPresenter.view = mockLoginView
}
@Test
public fun testLoginPresenterResume(){
given(mockLoginView.context()).willReturn(mockContext)
loginPresenter.resume();
}
}
LoginPresenter 构造函数:
class LoginPresenter @Inject constructor(@Named("getCredentials") val getCredentials: UseCase,
@Named("loginUseCase") val loginUseCase: LoginUseCase) : Presenter<LoginView>
在loginPresenter.resume() 我有:
override fun resume() {
getCredentials.execute(GetCredentialsSubscriber() as DefaultSubscriber<in Any>)
}
最后是 GetCredentials:
open class GetCredentials @Inject constructor(var userRepository: UserRepository,
threadExecutor: Executor,
postExecutionThread: PostExecutionThread):
UseCase(threadExecutor, postExecutionThread) {
override fun buildUseCaseObservable(): Observable<Credentials> = userRepository.credentials()
}
问题是,GetCredentials 中的每个字段都是空的。我想我错过了一些东西(我从这个项目中获取了模式:https://github.com/android10/Android-CleanArchitecture),但我找不到它是什么。有谁知道这可能是什么原因?
【问题讨论】:
标签: android mockito kotlin robolectric