我正在学习使用Mockito和Robolectric在Android上进行测试。我用RxJava和Dagger2在Kotlin上使用Clean Architecture创建了一个非常简单的应用程序。设备上的所有设备都能正常工作,但我无法通过测试。这里是我的LoginPresenterTest:测试Android Kotlin应用程序 - Migito with Dagger注入null
@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),但我找不到它是什么。有谁知道可能会导致这种情况?
谢谢你的回复。我通过创建'UseCaseTestClass'解决了这个问题,它嘲笑'GetCredential'行为,所以一切正常。 –