Я использую пакет provider
в нашем приложении и хочу индивидуально протестировать свой класс ChangeNotifier
, чтобы иметь простые модульные тесты, проверяющие бизнес-логи c.
Помимо значений 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, так что это Трудно обнаружить, если я на неправильном пути.