我們如何驗證函式內部的方法是否被呼叫?我這里有一個示例代碼。
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>
我在這里做錯了什么?感謝這么多幫助。
uj5u.com熱心網友回復:
您在測驗中嘲笑錯誤的方法。
您必須模擬 answerService#doSomething而不是Repository#doSimethingFancy. 檢查你的when陳述。
test('test name', () async {
when(service.doSomething()).thenAnswer((_) => Future.value());
await repository.somethingFancy();
verify(service.doSomething).called(1);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/527216.html
標籤:扑单元测试测试嘲弄
