【发布时间】:2021-01-07 23:31:42
【问题描述】:
我花了五个小时尝试解决它,但没有任何效果。我想在从互联网加载数据后测试使用流和接收数据的 bloc 类。用例测试运行良好,但 bloc 类今天很头疼,这已经在应用程序上运行,但测试我真的不知道如何解决
文件 bloc.dart
class Bloc {
final UseCase _useCase;
Bloc(this._useCase);
final _controller = StreamController.broadcast();
Stream get stream => _controller.stream;
doSomething() async {
ResponseModel responseModel = await _useCase.call();
_controller.sink.add(responseModel);//<-- I would like test this
}
dispose() {
_controller.close();
}
}
这是单元测试类 bloc_test.dart
class UseCaseMock extends Mock implements UseCase {}
main() {
UseCase useCase;
Bloc bloc;
setUp(() async {
useCase = UseCaseMock();
bloc = Bloc(useCase);
});
tearDown(() {
bloc.dispose();
});
group('Test Bloc', () {
test('load stuff must sink Response ', () async {
when(useCase.call())
.thenAnswer((_) async => ResponseModel('id','name'));
//FIRST I TRY It, DOESNT WORK
// await expectLater( bloc.stream, emits(isA<ResponseModel>()));
bloc.stream.listen((response) {
//print(response) <-----return null I THINK HERE IS THE PROBLEM
expect(response, isA<ResponseModel>());
});
await bloc.doSomething();
});
});
}
请问您知道怎么解决吗?谢谢
【问题讨论】:
-
您定义了一个类“MyBloc”,但在测试中您使用的是一个类“Bloc”。是不是打错字了?
-
你从这个测试中得到了什么输出?另外,你的意思是
await bloc.loadStuff()? -
@Abion47 我希望监听测试接收我通过 sink.add 发送到 bloc 中的内容。我有机会让旧代码更容易理解。
-
@Victor Eronmosele 我重写了因此是我的应用程序的伪代码。
-
好的。我现在将发布我的答案。
标签: unit-testing flutter dart stream mockito