【发布时间】:2020-05-12 21:12:35
【问题描述】:
我在我们的应用程序中使用provider 包,我想单独测试我的ChangeNotifier 类,以便让简单的单元测试检查业务逻辑。
除了ChangeNotifier 属性的值之外,我还想确保在某些情况下(必要时),notifyListeners 已被调用,否则依赖于来自的最新信息的小部件此类将不会更新。
目前,我正在间接测试 notifyListeners 是否已被调用:我正在使用 ChangeNotifier 允许我使用其 addListener 方法添加回调的事实。在我添加到我们的测试套件的回调中,我只是增加一个整数计数器变量并对其进行断言。
这是测试我的ChangeNotifier 是否调用其侦听器的正确方法吗?有没有更具描述性的测试方法?
这是我正在测试的课程(已简化,因此我可以在 StackOverflow 上分享):
import 'package:flutter/foundation.dart';
class ExampleModel extends ChangeNotifier {
int _value = 0;
int get value => _value;
void increment() {
_value++;
notifyListeners();
}
}
这就是我测试它的方式:
import 'package:mobile_app/example_model.dart';
import 'package:test/test.dart';
void main() {
group('$ExampleModel', () {
ExampleModel exampleModel;
int listenerCallCount;
setUp(() {
listenerCallCount = 0;
exampleModel = ExampleModel()
..addListener(() {
listenerCallCount += 1;
});
});
test('increments value and calls listeners', () {
exampleModel.increment();
expect(exampleModel.value, 1);
exampleModel.increment();
expect(listenerCallCount, 2);
});
test('unit tests are independent from each other', () {
exampleModel.increment();
expect(exampleModel.value, 1);
exampleModel.increment();
expect(listenerCallCount, 2);
});
});
}
另外,如果您认为以不同方式进行测试会更好,请告诉我,我目前在团队中作为 Flutter 开发人员单独工作,因此很难发现我是否走错了路。
【问题讨论】:
-
没关系。我不太确定还有什么要添加的
-
谢谢@RémiRousselet,我有点不确定,因为它需要一些手动代码,我想知道是否有更好的 mockito 方法
-
你可以在这里使用 Mockito。但是由于监听器既没有参数也不需要返回一些东西,所以它不是很有用。
标签: unit-testing flutter dart provider