【发布时间】:2020-01-01 19:09:31
【问题描述】:
目前我正在为我的移动 Web 应用程序(Android 应用程序)编写单元测试。单元测试是指我基于 Google Firebase Auth 构建的登录系统。
随着firebase authentication 插件的最新版本之一,某些函数的返回类型已更改。例如,方法firebaseAuth.signInWithEmailAndPassword已从FirebaseUser更改为AuthResult
我在AuthService.dart 中有一个登录 功能,内容如下:
Future<bool> login(LoginUserData userData) async {
try {
_checkUserDataValidity(userData);
final AuthResult authResult= await firebaseAuth.signInWithEmailAndPassword(email: userData.email, password: userData.password);
return authResult.user != null;
} catch (exception) {
return false;
}
}
所以,如您所见,我只是在检查用户的数据是否正确 - 我返回一个布尔值以在另一个文件中检查这一点(如果返回 true,Navigator 将路由到另一个站点,如果返回错误,则会弹出错误消息)。
我的单元测试例如检查几个案例:
- 正确的数据
- 数据不正确(userData 不为空或 null)
- 空数据
测试示例代码:
test('Login should work with valid user data', () async {
when(
firebaseAuthMock.signInWithEmailAndPassword(
email: testValidUserData.email,
password: testValidUserData.password,
)
).thenAnswer(
(_) => Future<AuthResultMock>.value(firebaseAuthResultMock)
);
final bool actionSuccess = await authService.login(testValidUserData);
verify(
firebaseAuthMock.signInWithEmailAndPassword(
email: testValidUserData.email,
password: testValidUserData.password,
)
).called(1);
expect(actionSuccess, true);
});
为了涵盖我上面列表的第一种和第二种情况,我想使用两种不同的 Mocks。一个 Mock 包含一个用户,另一个 Mock 中没有用户。
当前问题:
(_) => Future<AuthResultMock>.value(firebaseAuthResultMock)
在我的测试中与AuthServie.dart中的这段代码冲突
return authResult.user != null;
模拟的用户为 null。我怎样才能改变这个? :) 顺便说一句,我正在使用 Mockito。
我的想法是:
- 对于正确的数据,返回一个包含用户的模拟。
- 对于无效数据,返回一个以 null 为用户的 mock。
非常感谢。 :)
【问题讨论】:
标签: android unit-testing testing flutter dart