运行此测试时,我得到空指针异常。我用按钮检查一切是否正常。所以roboelectric或firebase都存在问题。我不知道为什么会这样。
当我手工完成时,一切正常。用户已创建且活动已更改。
编辑:使用espresso的UI测试工作正常。
@RunWith(RobolectricTestRunner::class)
@Config(constants = BuildConfig::class)
class RegisterUserTest {
@Test
fun shouldRegisterUser() {
val activity = Robolectric.setupActivity(RegistrationActivity::class.java)
val emailText = activity.findViewById<EditText>(R.id.text_email)
.setText("example@example.com")
val passwordText = activity.findViewById<EditText>(R.id.text_password)
.setText("password123")
val confirmPasswordText = activity.findViewById<EditText>(R.id.text_confirm_password)
.setText("password123")
val signupButton = activity.findViewById<Button>(R.id.button_register)
assertNotNull(signupButton)
assert(signupButton.isEnabled)
signupButton.performClick()
assertNotNull(activity.firebaseAuth.currentUser)
val actualIntent = shadowOf(RuntimeEnvironment.application).nextStartedActivity
val expectedIntent = Intent(activity, LoginActivity::class.java)
assertEquals(expectedIntent.component, actualIntent.component)
}
}
在我的acitvity onCreate方法中,我已经分配了一个监听器。
btnRegister.setOnClickListener{
registerUser(textEmail.text.toString(), textPassword.text.toString())
val intent = Intent(this@RegistrationActivity, LoginActivity::class.java)
startActivity(intent)
}
这是使用Firebase Auth的注册方法。
fun registerUser(email: String, password: String) {
this.firebaseAuth.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener { task: Task<AuthResult> ->
if (task.isSuccessful) {
Log.d(TAG, "createUserWithEmail:success")
} else {
Log.w(TAG, "createUserWithEmail:failure")
}
}
}
错误堆栈跟踪:
java.lang.NullPointerException
at com.google.android.gms.internal.zzdvv.zzb(Unknown Source)
at com.google.android.gms.internal.zzdwc.zza(Unknown Source)
at com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(Unknown Source)
at com.example.daza.meter.RegistrationActivity.registerUser(RegistrationActivity.kt:154)
at com.example.daza.meter.RegistrationActivity$onCreate$1.onClick(RegistrationActivity.kt:62)
at android.view.View.performClick(View.java:6256)
at com.example.daza.meter.RegisterUserTest.shouldRegisterUser(RegisterUserTest.kt:41)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.robolectric.RobolectricTestRunner$HelperTestRunner$1.evaluate(RobolectricTestRunner.java:568)
at org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:253)
at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:130)
at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:42)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.robolectric.internal.SandboxTestRunner$1.evaluate(SandboxTestRunner.java:84)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)