169 похожих чатов

Всем привет. Решил вкатиться в тестирование, кажется, я чего-то не

понимаю. Один тест валится с ошибкой "Expected 5, actual 4", второй проходит успешно. Что я делаю не так?!

29 ответов

10 просмотров

Если вы тестируете UI, то тестировать нужно не только ввод, но и вывод, т.е. данные отображаемые пользователю через виджет Text. Его нужно находить и считывать его значение.

Evgen-Fil // hehe Автор вопроса
Igor BD
Если вы тестируете UI, то тестировать нужно не тол...

За совет спасибо, это будет отдельный тест. Конкретно первый тест, который падает, проверяет, что при нажатии +/- вызывается колбэк с правильным значением, и оно меняется. Если что, тестируемый виджет — stateless. Мне больше интересно, почему по сути точно такой же второй тест работает

Evgen-Fil // hehe Автор вопроса
Evgen Fil // hehe
За совет спасибо, это будет отдельный тест. Конкре...

Что интересно, теперь второй падает, если его написать вот так. На третьем expect пишет Expected 2, actual 1.

Evgen-Fil // hehe Автор вопроса

Что-то попахивает 🩼💩🩼, но другого способа не придумал, а тест теперь проходит

Evgen Fil // hehe
screenshot Что-то попахивает 🩼💩🩼, но другого способа не приду...

Эмм а виджет то зачем вручную перестраивать?

Evgen-Fil // hehe Автор вопроса
Evgen Fil // hehe
stateless

По факту onValueChanged вызывается при нажатии на +1 и -1, в качестве параметра отдаёт новое значение

Evgen Fil // hehe
screenshot Что-то попахивает 🩼💩🩼, но другого способа не приду...

Такие тесты называются "хрупкими". Тестировать нужно "черный ящик": на вход подал значение, на выходе получил значение и проверил. У вас же происходит передача не значения, а функции, причем не в виде мок-объекта, а просто и топорно с изменяемым значением изнутри теста. Такой тест, не тест, а часть функционала тестируемого, что плохо. Если бы вы тестировали именно UI и не выходили бы за пределы слоя UI, то такой тест делал бы не нужными эти тесты с коллбеками.

Igor BD
Такие тесты называются "хрупкими". Тестировать нуж...

Да, и появление желания передать коллбек, сигнализирует о том, что у вас нет выделения в отдельный слой бизнес логики. Задача UI только получать данные и события тапов/кликов, и отображать данные в виде текста, картинок и т.п. Вся логика должна быть в отдельных классах, которые нужно тестировать отдельно.

Evgen-Fil // hehe Автор вопроса

Это понятно: "Задача UI только получать данные и события тапов/кликов, и отображать данные в виде текста, картинок и т.п.", надеюсь?

Evgen Fil // hehe
А тут не особо понял

видимо, он о том, что если при написании тестов возникает необходимость переписывать код, значит нарушены принципы SOLID

Evgen-Fil // hehe Автор вопроса
Igor BD
Это понятно: "Задача UI только получать данные и с...

А реагировать кто будет? Я, как юзер интерфейс, получил клик, куда его отправлять? Через колбэк же это делается, не?

Evgen Fil // hehe
А реагировать кто будет? Я, как юзер интерфейс, по...

Не через коллбек. Применительно к вашему примеру, создаешь класс class CalcNotifier with ChangeNotifier в нем переменная счетчика и два метода для инкремента и декремента. В этих методах изменяешь переменную счетчика и вызываешь notifyListeners() На странице виджета создаешь экземпляр этого класса _notifier, подписываешься в initState() как слушатель оповещений этого класса _notifier.addListener(setState((){})). В кнопках вызываешь нужные методы из _notifier. А в Text(_notifier.counter). Примерно так.

Evgen-Fil // hehe Автор вопроса
Igor BD
Не через коллбек. Применительно к вашему примеру, ...

смысл делать через ChangeNotifier если у тебя каллбек это setState? тогда делайте просто через стейтфул виджеты. Если хотите нормальный стейт-менеджмент - отказывайтесь от стейтфул виджета везде, где это возможно. Используйте, например, ListenableBuilder. иначе всё, о чем вы тут пишете, не имеет абсолютно никакого смысла

Egorick 🌵
смысл делать через ChangeNotifier если у тебя калл...

Бред. Одно другому не мешает. Для микросостояний не зазорно и стейтфул использовать

Egorick 🌵
смысл делать через ChangeNotifier если у тебя калл...

Еще раз для самых умных. Я показывал вариант отделения логики от представления. Простейший, общий вариант. Как примерно это можно реализовать. Ежу понятно, что можно использовать Bloc или еще что-то.

Igor BD
Еще раз для самых умных. Я показывал вариант отдел...

Зочем что-то отделять?) На всё по всё есть хуки

Adel' Gilyazeev
Зочем что-то отделять?) На всё по всё есть хуки

Бля понеслось... Что еще придумаешь? Чем еще блеснешь?

А почему - помнишь?)

Adel' Gilyazeev
А почему - помнишь?)

нет, я даже не верен он ли это говорил, или кто то другой

Dart Mitai
нет, я даже не верен он ли это говорил, или кто то...

Да многие говорят) всё из за того что билд метод должен быть ... Каким?

Dart Mitai
нет, я даже не верен он ли это говорил, или кто то...

Чистой она должна быть) то есть зависит только от стейта и контекста... И при одинаковых аргументах должен одинаковый результат возвращать... Без каких либо сайдээфектов

Evgen-Fil // hehe Автор вопроса
Igor BD
Не через коллбек. Применительно к вашему примеру, ...

Ладно, идею с подпиской я осознал, она очень даже неплохая, возьму на заметку

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
49
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Подскажите, есть какие-то события создания/уничтожения у TFrame по типу TForm (OnCreate и OnClose/OnDestroy) ? Как отловить создание TFrame и "перед" уничтожением. На Tframe р...
Денис
8
а чем хуже?
Alexey Kulakov
10
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
1
Карта сайта