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

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

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

29 ответов

36 просмотров

Если вы тестируете 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 Автор вопроса
Evgen Fil // hehe
stateless

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

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

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

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

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

Это понятно: "Задача 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). Примерно так.

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
Не через коллбек. Применительно к вашему примеру, ...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта