尝试对使用Firebase身份验证的简单登录功能进行单元测试。尝试在测试类中初始化Firebase身份验证时收到ExceptionInInitializerError
import com.google.firebase.auth.FirebaseAuth;
@RunWith(MockitoJUnitRunner.class)
public class LoginTest {
@Mock
private LoginView view;
@Mock
private FirebaseAuth firebaseAuth;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
view = mock(LogIn.class);
firebaseAuth = FirebaseAuth.getInstance(); // Error
}
错误消息:
java.lang.ExceptionInInitializerError
at com.google.firebase.FirebaseApp.<clinit>(SourceFile:131)
at com.google.firebase.auth.FirebaseAuth.getInstance(Unknown Source)
Caused by: java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked.
答案 0 :(得分:0)
您不想在单元测试期间调用Firebase的任何部分。根本无法在JVM中运行的单元测试环境中成功初始化Firebase SDK。如果您的测试模拟FirebaseAuth实例,并决定调用其方法时该怎么做,那就更好了。这将涉及让它创建通常会生成的其他对象模拟。重要的是将Firebase身份验证完全远离测试的代码路径,以免由于未初始化而不会产生任何错误。