作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们如何验证函数内部的方法是否被调用?我这里有一个示例代码。
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();
,我无法注入(inject) Service 类
,因此肯定不会调用服务类中的方法。这就是为什么如果我运行这个测试:
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 (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);
});
关于flutter - 使用 mocktail 包进行单元测试时,类型 'Null' 不是类型 'Future<void>' 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74312836/
我在我的 iOS 项目中使用 Square 的 Mocktail 库:https://github.com/square/objc-mocktail .它在一种情况下非常适合与 URL 完全匹配,但我
我们如何验证函数内部的方法是否被调用?我这里有一个示例代码。 class MockService extends Mock implements Service {} class MockReposi
我已经为一个简单的 HTTP get 编写了一个测试,使用 Mocktail 来模拟 HTTP 客户端。当我在测试中调用 get 方法时,我收到“类型‘空’不是‘ future ’类型的子类型”。 有
我是一名优秀的程序员,十分优秀!