как мы можем проверить, вызывается ли метод внутри функции или нет? У меня есть пример кода.
class MockService extends Mock implements Service {}
class MockRepository extends Mock implements Repository {}
class Repository {
Repository({
required this.service,
});
final Service service;
Future<void> somethingFancy() async {
await service.doSomething();
}
}
class Service {
Future<void> doSomething() async {}
}
void main() {
final service = MockService();
final repository = Repository(service: service);
group('auth repository test', () {
test('test name', () async {
when(repository.somethingFancy).thenAnswer((_) => Future.value());
await repository.somethingFancy();
verify(service.doSomething).called(1);
});
});
}
если я запускаю тест, я получаю эту ошибку:
type 'Null' is not a subtype of type 'Future<void>'
test/auth_repository_test.dart 20:16 MockService.doSomething
test/auth_repository_test.dart 15:19 Repository.registerUser
package:mocktail/src/mocktail.dart 210:8 when.<fn>
test/auth_repository_test.dart 29:11 main.<fn>.<fn>
===== asynchronous gap ===========================
dart:async _completeOnAsyncError
package:mocktail/src/mocktail.dart 210:8 when.<fn>
test/auth_repository_test.dart 29:11 main.<fn>.<fn>
если я изменю переменную репозитория на final repository = MockRepository();
,
я не могу внедрить Service class
, поэтому определенно метод внутри класса обслуживания вызываться не будет. Вот почему, если я запускаю этот тест:
void main() {
final service = MockService();
final repository = MockRepository();
group('auth repository test', () {
test('test name', () async {
when(repository.somethingFancy).thenAnswer((_) => Future.value());
await repository.somethingFancy();
verify(service.doSomething).called(1);
});
});
}
Я получаю сообщение об ошибке no matching calls
No matching calls (actually, no calls at all).
(If you called `verify(...).called(0);`, please instead use `verifyNever(...);`.)
package:test_api fail
package:mocktail/src/mocktail.dart 722:7 _VerifyCall._checkWith
package:mocktail/src/mocktail.dart 515:18 _makeVerify.<fn>
test/auth_repository_test.dart 32:13 main.<fn>.<fn>
Что я здесь делаю неправильно? оцените такую помощь.
Вы издеваетесь над неправильным методом в своем тесте.
Вы должны имитировать ответ Service#doSomething
вместо Repository#doSimethingFancy
. Проверьте свое заявление when
.
test('test name', () async {
when(service.doSomething()).thenAnswer((_) => Future.value());
await repository.somethingFancy();
verify(service.doSomething).called(1);
});
Добро пожаловать! Нужно больше контекста, чтобы ответить на это. Вы можете создать отдельный вопрос с полным описанием
Большое спасибо за это. я просто хотел знать, почему я сделал вышеуказанный тест для всех своих контроллеров, и все они прошли. но когда я попытался реализовать это в своих классах обслуживания и классах репозитория, почему это не работает?