在使用空安全飛鏢代碼庫中的模擬飛鏢測驗中模擬飛鏢測驗中的方法時,使用引數匹配器時,我收到以下錯誤訊息。需要采取哪些步驟來解決此問題
錯誤:
The argument type 'Null' can't be assigned to the parameter type 'int'.
測驗代碼可以在這里找到:
class MockNumberTriviaRepository extends Mock implements NumberTriviaRespository {}
void main() {
late GetConcreteNumberTrivia usecase;
late MockNumberTriviaRepository mockNumberTriviaRepository;
setUp(() {
mockNumberTriviaRepository = MockNumberTriviaRepository();
usecase = GetConcreteNumberTrivia(mockNumberTriviaRepository);
});
const tNumber = 1;
const tNumberTrivia = NumberTrivia(number: tNumber, text: "test");
test('should get trivia for the number from repository', () async {
//arrange
when(mockNumberTriviaRepository.getConcreteNumberTrivia(any)).thenAnswer((_) async => const Right(tNumberTrivia));
//act
final result = await usecase.execute(tNumber);
//assert
// UseCase should simply return whatever was returned from the Repository
expect(result, const Right(tNumberTrivia));
// Verify that the method has been called on the Repository
verify(mockNumberTriviaRepository.getConcreteNumberTrivia(tNumber));
verifyNoMoreInteractions(mockNumberTriviaRepository);
});
}
實作代碼可以在這里找到:
abstract class NumberTriviaRespository {
Future<Either<Failure, NumberTrivia>> getConcreteNumberTrivia(int number);
Future<Either<Failure, NumberTrivia>> getRandomNumberTrivia();
}
abstract class Failure extends Equatable {
const Failure([List properties = const <dynamic>[]]);
}
class GetConcreteNumberTrivia {
final NumberTriviaRespository respository;
const GetConcreteNumberTrivia(this.respository);
Future<Either<Failure, NumberTrivia>> execute(int number) async {
return await respository.getConcreteNumberTrivia(number);
}
}
class NumberTrivia extends Equatable {
final String text;
final int number;
const NumberTrivia({required this.text, required this.number});
@override
List<Object?> get props => [text, number];
}
uj5u.com熱心網友回復:
Mockito 在 Dart Null 安全方面存在問題。請參閱https://github.com/dart-lang/mockito/blob/master/NULL_SAFETY_README.md。
您可以按照上面鏈接中的方法重寫模擬類的實作以支持 null 引數:
class MockNumberTriviaRepository extends Mock
implements NumberTriviaRespository {
@override
Future<Either<Failure, NumberTrivia>> getConcreteNumberTrivia(int? number) =>
super.noSuchMethod(Invocation.method(#getConcreteNumberTrivia, [number]),
returnValue: Future.value(
Right<Failure, NumberTrivia>(NumberTrivia(text: "", number: 1))));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522609.html
標籤:镖模仿者飞镖零安全
上一篇:注冊后如何添加JSON影片
