参数类型 'Future<UserCredential>' 无法分配给参数类型 'dynamic Function()'

The argument type 'Future<UserCredential>' can't be assigned to the parameter type 'dynamic Function()'

我正在学习 TDD 并练习我的测试写作。我想通过 Firebase 为我的登录编写测试。 这是测试文件:

import 'package:firebase/firebase.dart';
import 'package:firebase_auth/firebase_auth.dart' as fa;
import 'package:flutter_test/flutter_test.dart';

import 'package:mocktail/mocktail.dart';
import 'package:scopetik/features/login/data/login_data_impl.dart';
import 'package:scopetik/features/login/models/user_model.dart';

class MockFirebaseAuth extends Mock implements fa.FirebaseAuth {}

class MockFirebaseUser extends Mock implements fa.User {}

class MockAuthResult extends Mock implements fa.UserCredential {}

void main() {
  late LoginDataImpl sut;
  late MockFirebaseAuth mockFirebaseAuth;

  setUp(() {
    mockFirebaseAuth = MockFirebaseAuth();
    sut = LoginDataImpl(mockFirebaseAuth);
  });

  group(
    'Test LoginDataImpl class',
    () {
      when(mockFirebaseAuth.signInWithEmailAndPassword(
              email: 'email', password: 'password'))
          .thenAnswer((_) async {
        return MockAuthResult();
      });
      test(
        "get UserModel",
        () async {
          //arrange
        },
      );
    },
  );
}

我不知道为什么 when 函数不让我 return future<UserCredential>.

我也遇到了同样的问题。您需要使用 mockito 而不是 mocktail 才能做到这一点。

您可以在此处找到两个库的 when 属性,mocktail, mockito