我在用无效的安全测试中遇到困难
我正在尝试在DART中进行测试,但我将获得以下返回:
类型的'null'不是类型的子类型'Future< a e< lafurologin,loginuser>>'
login_with_user_test.dart
import 'package:dartz/dartz.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:ola_desktop/modules/login/domain/entities/login_user.dart';
import 'package:ola_desktop/modules/login/domain/repositories/login_repository.dart';
import 'package:ola_desktop/modules/login/domain/usecases/login_with_user.dart';
class LoginRepositoryMock extends Mock implements LoginRepository {}
main() {
final repository = LoginRepositoryMock();
final usecase = LoginWithUserImpl(repository);
test('Deve retornar um LoginUser', () async {
// ignore: prefer_const_constructors
when(repository.login(user: '', password: ''))
.thenAnswer((_) async => Right(LoginUser.empty()));
final result = await usecase("gabriel.ribeiro", "123456");
expect(result, isA<LoginUser>());
});
}
login_repository.dart
import 'package:dartz/dartz.dart';
import '../entities/login_user.dart';
import '../errors/errors.dart';
abstract class LoginRepository {
Future<Either<FailureLogin, LoginUser>> login(
{required String user, required String password});
}
login_with_user.dart
import 'package:dartz/dartz.dart';
import '../entities/login_user.dart';
import '../errors/errors.dart';
import '../repositories/login_repository.dart';
abstract class LoginWithUser {
Future<Either<FailureLogin, LoginUser>> call(String user, String password);
}
class LoginWithUserImpl implements LoginWithUser {
final LoginRepository repository;
LoginWithUserImpl(this.repository);
@override
Future<Either<FailureLogin, LoginUser>> call(String user, String password) {
return repository.login(user: user, password: password);
}
}
login_user.dart.dart
class LoginUser {
final String user;
final String password;
LoginUser({required this.user, required this.password});
factory LoginUser.empty() {
return LoginUser(user: '', password: '');
}
}
abstract class FailureLogin implements Exception {}
I'm trying to run a test in dart and I'm getting the following return:
type 'Null' is not a subtype of type 'Future<Either<FailureLogin, LoginUser>>'
login_with_user_test.dart
import 'package:dartz/dartz.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:ola_desktop/modules/login/domain/entities/login_user.dart';
import 'package:ola_desktop/modules/login/domain/repositories/login_repository.dart';
import 'package:ola_desktop/modules/login/domain/usecases/login_with_user.dart';
class LoginRepositoryMock extends Mock implements LoginRepository {}
main() {
final repository = LoginRepositoryMock();
final usecase = LoginWithUserImpl(repository);
test('Deve retornar um LoginUser', () async {
// ignore: prefer_const_constructors
when(repository.login(user: '', password: ''))
.thenAnswer((_) async => Right(LoginUser.empty()));
final result = await usecase("gabriel.ribeiro", "123456");
expect(result, isA<LoginUser>());
});
}
login_repository.dart
import 'package:dartz/dartz.dart';
import '../entities/login_user.dart';
import '../errors/errors.dart';
abstract class LoginRepository {
Future<Either<FailureLogin, LoginUser>> login(
{required String user, required String password});
}
login_with_user.dart
import 'package:dartz/dartz.dart';
import '../entities/login_user.dart';
import '../errors/errors.dart';
import '../repositories/login_repository.dart';
abstract class LoginWithUser {
Future<Either<FailureLogin, LoginUser>> call(String user, String password);
}
class LoginWithUserImpl implements LoginWithUser {
final LoginRepository repository;
LoginWithUserImpl(this.repository);
@override
Future<Either<FailureLogin, LoginUser>> call(String user, String password) {
return repository.login(user: user, password: password);
}
}
login_user.dart
class LoginUser {
final String user;
final String password;
LoginUser({required this.user, required this.password});
factory LoginUser.empty() {
return LoginUser(user: '', password: '');
}
}
errors.dart
abstract class FailureLogin implements Exception {}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我不确定,但也许可以通过“ failurologin”,“ loginuser”&gt;您可以使用result.isright()重写测试代码,如果有效,请检查期望(结果,isa(isa());线。因为结果可以是右或向左但要么类型。
另外,您可以检查
repository.login(用户:',密码:'')
用等待repository.login(用户:'',password:'')
>I am not totaly sure but maybe is releated with Either<FailureLogin, LoginUser>, can you rewrite the test codes with result.isRight(), if it is works re check the expect(result, isA()); line. because result can be Right or left but is Either type.
also can you check the
repository.login(user: '', password: '')
replacing withawait repository.login(user: '', password: '')
伟大的下午!
设法解决,这扩展了模拟是nullsafety之前的事
nullsafety之后,这不再起作用。必须使用
generatemock
类测试
然后我在终端中运行代码以生成类 mocks :
Great afternoon!
Manage to solve, this extends Mock is thing before nullsafety
after nullsafety this no longer works. Had to use
GenerateMock
class test
Then I ran the code in the terminal to generate class mocks: