I am implementing the flutter project in TDD Clean Architecture by following this video: https://www.youtube.com/watch?v=lPkWX8xFthE&t=1s
my code:
class MockNumberTriviaRepository extends Mock
implements NumberTriviaRepository {}
void main() {
late MockNumberTriviaRepository mockNumberTriviaRepository;
late GetConcreteNumberTrivia usecase;
setUp(() {
mockNumberTriviaRepository = MockNumberTriviaRepository();
usecase = GetConcreteNumberTrivia(mockNumberTriviaRepository);
});
final tNumber = 1;
final tNumberTrivia = NumberTrivia(text: 'test', number: 1);
test(
'should get trivia for the number from the repository',
() async {
//arrange
when( mockNumberTriviaRepository.getConcreteNumberTrivia(1)).thenAnswer((_) async {
return Right(tNumberTrivia);
});
//act
final result = await usecase.execute(number: 10);
//assert
expect(result, Right(tNumberTrivia));
verify(mockNumberTriviaRepository.getConcreteNumberTrivia(tNumber));
verifyNoMoreInteractions(mockNumberTriviaRepository);
},
);
}
when running the test it always comes results as
package:number_trivia/features/number_trivia/domain/repositories/number_trivia_repository.dart 7:41 MockNumberTriviaRepository.getConcreteNumberTrivia
test\features\number_trivia\domain\usecases\get_concrete_number_trivia_test.dart 27:40 main.<fn>
test\features\number_trivia\domain\usecases\get_concrete_number_trivia_test.dart 25:5 main.<fn>
type 'Null' is not a subtype of type 'Future<Either<Failure, NumberTrivia>>'
it shows an error here:
abstract class NumberTriviaRepository{
Future<Either<Failure, NumberTrivia>> getConcreteNumberTrivia(int number);
}
class GetConcreteNumberTrivia {
final NumberTriviaRepository repository;
GetConcreteNumberTrivia(this.repository);
Future<Either<Failure, NumberTrivia>> execute({required int number}) async {
return await repository.getConcreteNumberTrivia(number);
}
}
Please give me some solution to move forward.
Here is the ResoCoder TDD Course null-safety version.
ResoCoder TDD Course (Null-safety)
Let me know if it helps.
I faced the same error, I did some research and it finally worked for me.
You need to "Null" check, which if you encountered such an error.
To make Dart treat your code as null safe, the SDK constraints must require a language version that has null safety support. For example, your pubspec.yaml file might have the following constraints:
environment:
sdk: ">=2.12.0 <3.0.0"
You should give the variable a nullable type by adding a question mark (?) after the type name
abstract class NumberTriviaRepository {
Future<Either<Failure, NumberTrivia>>? getConcreateNumberTrivia(int number);
Future<Either<Failure, NumberTrivia>>? getRandomNumberTrivia();
}
You have to use the functions in the "NumberTriviaRepository" when you call them.
class GetConcreateNumberTrivia {
final NumberTriviaRepository repository;
GetConcreateNumberTrivia(this.repository);
Future<Either<Failure, NumberTrivia>?> execute({required int number}) async {
return await repository.getConcreateNumberTrivia((number));
}
}
I added a few useful links below. I hope your problem is solved.
Understanding null safety
Sound null safety
Practice with null safety
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With