Поглед към автоматизирани тестове на модули и джаджи

Автоматизираните тестове в разработката на софтуер ви помагат да хванете грешки и много други проблеми с приложението си, преди да го натиснете. Това е особено полезно за големи приложения, където ръчното тестване на всяка част може да не е възможно.

За наш късмет, Flutter има различни видове тестове, които можем да направим.

  • „Единични тестове“
  • „Тестове за джаджи“
  • „Интеграционни тестове“

В тази част ще разгледаме тестове за единици и джаджи.

Единични тестове

Единичното тестване разбива кода ви на прости части (единици),и тези части след това се тестват. Тези единици обикновено са функции, методи, класове или дори променливи. Нека го изпробваме!

Първо, трябва да имате инсталиран пакета flutter_test във вашите зависимости за програмисти във вашия pubspec.yaml файл.

Ако създавате приложение Dart, което не зависи от Flutter, можете да инсталирате пакета testкато зависимост от разработчици.

След това създайте клас с кода, който искате да тествате, кръстих моя we.dart,исъздайте и тестовия файл за този клас, кръстих моя we_test.dart.
Файлът, в който е вашият код, може да бъде в lib/ и вашите тестове трябва да са в tests/папка в корена.

Кодът в класа, който искаме да тестваме, е както следва:

Тук имаме прост клас с един метод и един екземпляр на низ. Низът textтрябва да се редактира със сумата от параметрите, предадени на метода populateText()след извикването му.

Нашият тестов файл изглежда така:

Първо импортираме пакета flutter_test и класа, който искаме да тестваме. След това започваме да пишем.

Започваме с метода test()от пакета flutter_test. Методът приема два параметъра. Първо, описанието на теста и второ, функция с тестовете за изпълнение.

Тук първо задаваме класа WeTest(),който импортирахме в променлива, след което извикваме метода populateText, като предаваме параметри две и три. Следователно очакваме резултатът от сбора да бъде пет.

След това извикваме метода expect() от flutter_test, който се използва за утвърждаванече единицата, която тестваме, съвпада с това, което се връща при изпълнение на кода. Тези две се наричат ​​съответно действителен и съвпадение.

Ако съвпадат, тогава нашите тестове преминават, ако не, тогава се проваля.

Изпълнете теста

Можете да стартирате теста, като отворите тестовия файл (we_test.dart) и след това стартирате отстраняване на грешки от дебъгера на VS код.

Или стартирайте flutter test test/we_test.dart във вашия терминал.

Тестване на джаджи

Тестовете на джаджи правят точно това, което предполагат: тествайте джаджи.

Тестовете на джаджи се различават от модулните тестове по това, че изискват класове и функции, различни от тези в модулните тестове. Тези инструменти са част от пакета flutter_test.

Да се ​​заемем!

На този етап трябва да имате инсталиран пакет flutter_test чрез вашия pubspec.yamlфайл.

След това имаме нужда от джаджи за тестване, така че ще създадем екран с някои прости джаджи:

Резултатът е екран с текстово поле (и контролер), RaisedButton и текстов уиджет (за показване на въведения текст).

Сега, след като имаме джаджи, нека напишем нашите тестове:

Незабавно трябва да започнете да забелязвате разликите между този и модулните тестове, които написахме по-рано.

  1. Функцията testWidgets(), която създава нов WidgetTester за всеки тест, се използва вместо функцията test() в тестовете на единици.
  2. Finder, който се използва за намиране на отделни джаджи.
  3. The Matcher (findsOneWidget, findsNothing, findsNwidgets), който използваме за проверка на уиджетите.
  4. pump(), който Flutter използва за изграждане на джаджа. Можете също да зададете продължителност за неща като анимации.

Какво става тук?

  • Първо, използваме функцията testWidgets() и предаваме описание за този тест, а WidgetTester ще се използва с всеки тестов случай.
  • След това изграждаме уиджетите, като извикваме pumpWidget().
  • Първата ни употреба на класа Finder е да намерим повдигнатия бутон на екрана. Тук използваме метода byType(), но има много други, които можем да опитаме, които ще се опитам да покажа, като използвам find.byKey() по-късно, за да намеря текстовото поле с присвоения му ключ.
  • След това се опитваме да тестваме TextField. Първо проверяваме дали има TextField с find.byKey() търсач и findsOneWidget съпоставител и след това задействаме повторно изграждане на изгледите.
  • Извикването на метода enterText() от WidgetTester позволява на Flutter да въвежда текст в намереното TextField, след което да възстановява изгледите отново.
  • И накрая, молим Flutter да провери дали текстът, отпечатан на екрана, е същият като текста, който беше въведен в предишната стъпка.

Изпълнете тестовете чрез вашия редактор или стартирайте flutter test test/widget_test.dart във вашия терминал. Този тест трябва да премине, но си поиграйте с него и вижте различните начини, по които нещата могат да се счупят.

Също така проверете всички методи и примери в използваните класове.

В продължение на това бих могъл да пиша за подигравателни интернет разговори и интеграционни тестове.