【发布时间】:2022-08-04 17:31:26
【问题描述】:
我是 Flutter 的新手,我想尝试为我创建的一个函数进行单元测试。该功能只是测试用户提供的用于登录的电子邮件和密码是否正确。因此,该函数提供与数据库的连接并验证电子邮件和密码是否有效。
我尝试使用 mockito 进行单元测试以模拟 Firebase,但效果不佳。我的函数返回一个 \"UserCredential\" 类型,我不知道如何用 Mocks 验证它。我试图为这种类型创建一个 Mock,但它说 \"type \'Null\' 不是类型 \'Future\'\" 的子类型...
任何人都可以做出明确的解释吗? :)
要测试的 Firebase 功能
import \'package:firebase_auth/firebase_auth.dart\';
import \'package:flexmes/data/models/user_model.dart\';
class UserAPI{
final CustomUser _customUser = CustomUser();
final FirebaseAuth auth;
UserAPI({required this.auth});
Future<UserCredential?> signInWithEmailAndPassword(String email, String password) async {
try{
UserCredential result = await auth.signInWithEmailAndPassword(email: email, password: password);
print (result);
return result;
} catch (error){
print (error);
return null;
}
}
}
signInWithEmailAndPassword 函数的单元测试
import \'package:firebase_auth/firebase_auth.dart\';
import \'package:flexmes/data/data_providers/user_provider.dart\';
import \'package:flutter_test/flutter_test.dart\';
import \'package:mockito/annotations.dart\';
import \'package:mockito/mockito.dart\';
class MockFirebaseAuth extends Mock implements FirebaseAuth{}
class MockUserCredential extends Mock implements UserCredential{}
void main(){
final MockFirebaseAuth mockAuth = MockFirebaseAuth();
final MockUserCredential userCredential = MockUserCredential();
group(\'description\', () {
late UserAPI userAPI;
setUp(() {
userAPI = UserAPI(auth: mockAuth);
});
tearDown(() {
});
test(\'Sign in with Email & Password\', () async {
when(mockAuth.signInWithEmailAndPassword(email: \"admin@admin.com\", password: \"password\")).
thenAnswer((_) => Future<MockUserCredential>.value(userCredential));
expect(await userAPI.signInWithEmailAndPassword(\"admin@admin.com\", \"password\"), userCredential);
});
});
}
-
你好,你解决了吗。我也面临同样的问题:(
-
找到解决方案了吗?
标签: flutter unit-testing mocking mockito