使用 Mockito 为 Firebase 用户身份验证设置单元测试
Posted
技术标签:
【中文标题】使用 Mockito 为 Firebase 用户身份验证设置单元测试【英文标题】:Setup Unit test for Firebase User authentication with Mockito 【发布时间】:2021-02-05 03:01:29 【问题描述】:我一直在尝试为我的 Firebase 用户身份验证类设置单元测试。我已经尝试像许多教程所展示的那样去做,但是由于对 firebase 核心插件进行了更新,它们已经改变了您必须设置环境的方式。我无法弄清楚如何使用 Mocks 调用 Firebase.initializeApp() 方法。该插件提供的文档也没有揭示任何解决方案。到目前为止,有人解决了这个问题吗?
class MockFirebaseAuth extends Mock implements fireAuth.FirebaseAuth
class MockFirebaseUser extends Mock implements fireAuth.User
class MockAuthResult extends Mock implements fireAuth.UserCredential
void main() async
TestWidgetsFlutterBinding.ensureInitialized();
MockFirebaseAuth _auth = MockFirebaseAuth();
BehaviorSubject<MockFirebaseUser> _user = BehaviorSubject<MockFirebaseUser>();
when(_auth.authStateChanges()).thenAnswer((_)
return _user;
);
User user = User.instance(auth: _auth);
group('User Model Test', ()
String email = 'test@email.com';
String password = '123456';
when(_auth.signInWithEmailAndPassword(email: email, password: password)).thenAnswer((_) async
_user.add(MockFirebaseUser());
return MockAuthResult();
);
test('sign in with email and password', () async
bool signedIn = await user.signIn(email, password);
expect(signedIn, true);
expect(user.status, Status.Authenticated);
);
test('sign out', () async );
);
抛出的错误:
[core/no-app] 没有创建 Firebase 应用“[DEFAULT]” - 调用 Firebase.initializeApp()
【问题讨论】:
【参考方案1】:你可以这样做:
setUpAll(() async
await Firebase.initializeApp();
);
【讨论】:
以上是关于使用 Mockito 为 Firebase 用户身份验证设置单元测试的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mockito 为以下代码编写 junit 测试?
如何使用 Firebase Cloud Firestore 对方法进行单元测试?
如何使用 mockito 为以下异常处理程序方法编写单元测试?