它似乎与匹配器具有相同的值,但仍然无法通过测试,可能是因为内存地址的问题。谁能告诉我当列表位于 Either<< Right >>
时如何测试结果test('get board list from remote data source', () async {
when(mockBoardRemoteDataSource.getBoards())
.thenAnswer((_) async => tBoardModels);
final result = await repository.getBoards();
verify(mockBoardRemoteDataSource.getBoards());
expect(result, equals(Right(toBoards)));
// Either<Failure, List<BoardInfo>> result;
// (new) Right<dynamic, List<BoardInfo>> Right(List<BoardInfo> _r)
});
//控制台结果
Expected: Right<dynamic, List<BoardInfo>>:<Right([_$_BoardInfo(1, name1, address1), _$_BoardInfo(2, name2, address2)])>
Actual: Right<Failure, List<BoardInfo>>:<Right([_$_BoardInfo(1, name1, address1), _$_BoardInfo(2, name2, address2)])>
package:test_api expect
package:flutter_test/src/widget_tester.dart 455:16 expect
test\features\nurban_honey\data\repositories\board_repository_impl_test.dart 58:9 main.<fn>.<fn>.<fn>
//BoardInfo实现
import 'package:equatable/equatable.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'board_info.freezed.dart';
@freezed
class BoardInfo extends Equatable with _$BoardInfo {
BoardInfo._();
factory BoardInfo(int id, String name, String address) = _BoardInfo;
@override
List<Object?> get props => [id, name, address];
}
最佳答案
感谢 Jay,他的回答帮助我做出了决定。
这就是我进行测试的方式:
// Act
var results = (await repository.fetch()).fold(
(failure) => failure,
(response) => response,
);
然后我做了一个类型期望,与我的用例中声明的失败类型相匹配:
执行成功的情况
// Assert
expect(results, isA<ResultType>());
在失败预期的情况下
// Assert
expect(results, isA<FailureType>());
整个测试用例如下所示
test('On successful execution, should returns a SuccessResultType', () async {
// Arrange
repository = MyUseCaseRepository();
// Act
var results = (await repository.fetch()).fold(
(failure) => failure,
(response) => response,
);
// Assert
expect(results, isA<SuccessResultType>());
});
我希望这种方法可以帮助任何人!
关于flutter-test - Flutter 如何测试 Either<Failure,List<Object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71644737/