Поглед към автоматизирани тестове на модули и джаджи
Автоматизираните тестове в разработката на софтуер ви помагат да хванете грешки и много други проблеми с приложението си, преди да го натиснете. Това е особено полезно за големи приложения, където ръчното тестване на всяка част може да не е възможно.
За наш късмет, 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
и текстов уиджет (за показване на въведения текст).
Сега, след като имаме джаджи, нека напишем нашите тестове:
Незабавно трябва да започнете да забелязвате разликите между този и модулните тестове, които написахме по-рано.
- Функцията
testWidgets()
, която създава новWidgetTester
за всеки тест, се използва вместо функциятаtest()
в тестовете на единици. Finder
, който се използва за намиране на отделни джаджи.- The Matcher (
findsOneWidget
,findsNothing
,findsNwidgets
), който използваме за проверка на уиджетите. 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
във вашия терминал. Този тест трябва да премине, но си поиграйте с него и вижте различните начини, по които нещата могат да се счупят.
Също така проверете всички методи и примери в използваните класове.
В продължение на това бих могъл да пиша за подигравателни интернет разговори и интеграционни тестове.