Я работаю над приложением, используя принципы чистой архитектуры. Итак, я создал репозиторий
abstract class TrainerIdPlusInfoRepo {
Future<Either<Failure,List<List>>> getTrainerIdPlusInfo();
}
Затем я создал класс варианта использования.
class GetTrainerAll extends UseCase<List, NoParams> {
TrainerIdPlusInfoRepo trainerIdPlusInfoRepo;
GetTrainerAll({ this.trainerIdPlusInfoRepo});
@override
Future <Either<Failure,List>> call(NoParams params) async{
List trainerList =[];
final listOfList = await trainerIdPlusInfoRepo.getTrainerIdPlusInfo();
final result = listOfList.fold((failure)=> failure , (successData) {
int length= successData.length ;
for(int i = 0 ; i < length; i++){
trainerList.add(successData[i][1]);
}
return trainerList;
} );
return result;
}
}
Затем я написал для него тест.
class MockTrainerIdPlusInfoRepo extends Mock implements TrainerIdPlusInfoRepo{}
void main(){
GetTrainerAll getTrainerAll ;
MockTrainerIdPlusInfoRepo mockTrainerIdPlusInfoRepo;
setUp((){
mockTrainerIdPlusInfoRepo = MockTrainerIdPlusInfoRepo();
getTrainerAll= GetTrainerAll(trainerIdPlusInfoRepo: mockTrainerIdPlusInfoRepo,
);
});
final tTrainer = Trainer(
name: 'Test data',
yearsOfExperience: 'Test data'
);
final tListOfList= [['Test data', tTrainer],['Test data', tTrainer]];
final List<Trainer> tSuccessData = [tTrainer,tTrainer];
group('getTrainerAll',(){
test('should return a list of trainer if getTrainerInfoPlusId returns a List',
() async{
//arrange
when(mockTrainerIdPlusInfoRepo.getTrainerIdPlusInfo())
.thenAnswer((_) async=> Right(tListOfList) );
// act
final result = await getTrainerAll(NoParams());
//assert
expect(result.runtimeType, Right(tSuccessData));
});
});
}
Результат: тип List не является подтипом типа FutureOr >> '
Согласно моему логу c, в тесте я объявил, что mockTrainerIdPlusInfoRepo.getTrainerIdPlusInfo () должен возвращать правую сторону любого . Следовательно, когда вызывается getAllTrainer (), должен быть вызван результат, соответствующий правильному значению. Итак, тест пройден.
Скажите, пожалуйста, где я ошибся.