Модульное тестирование включает в себя тестирование каждого отдельного модуля приложения. Это помогает разработчику тестировать небольшие функциональные возможности без запуска всего сложного приложения.
Внешняя библиотека Dart с именем «test» предоставляет стандартный способ написания и запуска модульных тестов.
Дарт-юнит-тестирование включает в себя следующие этапы:
Шаг 1: Установка «тестового» пакета
Для установки сторонних пакетов в текущем проекте вам потребуется файл pubspec.yaml . Чтобы установить тестовые пакеты , сначала сделайте следующую запись в файле pubspec.yaml —
dependencies: test:
Сделав запись, щелкните правой кнопкой мыши файл pubspec.yaml и получите зависимости. Он установит «тестовый» пакет. Ниже приведен скриншот для того же в редакторе WebStorm .
Пакеты также могут быть установлены из командной строки . Введите следующее в терминале —
pub get
Шаг 2: Импорт «тестового» пакета
import "package:test/test.dart";
Шаг 3 Написание тестов
Тесты задаются с помощью функции верхнего уровня test () , а тестовые утверждения выполняются с использованием функции wait () . Для использования этих методов они должны быть установлены как зависимость pub .
Синтаксис
test("Description of the test ", () { expect(actualValue , matchingValue) });
Функция group () может использоваться для группировки тестов. Описание каждой группы добавляется в начало описания ее теста.
Синтаксис
group("some_Group_Name", () { test("test_name_1", () { expect(actual, equals(exptected)); }); test("test_name_2", () { expect(actual, equals(expected)); }); })
Пример 1: Проходной тест
В следующем примере определяется метод Add () . Этот метод принимает два целочисленных значения и возвращает целое число, представляющее сумму . Чтобы проверить этот метод add () —
Шаг 1 — Импортируйте тестовый пакет, как указано ниже.
Шаг 2 — Определите тест, используя функцию test () . Здесь функция test () использует функцию wait () для принудительного подтверждения.
import 'package:test/test.dart'; // Import the test package int Add(int x,int y) // Function to be tested { return x+y; } void main() { // Define the test test("test to check add method",(){ // Arrange var expected = 30; // Act var actual = Add(10,20); // Asset expect(actual,expected); }); }
Он должен произвести следующий вывод —
00:00 +0: test to check add method 00:00 +1: All tests passed!
Пример 2: провальный тест
Метод subtract (), определенный ниже, имеет логическую ошибку. Следующий тест подтверждает то же самое.
import 'package:test/test.dart'; int Add(int x,int y){ return x+y; } int Sub(int x,int y){ return x-y-1; } void main(){ test('test to check sub',(){ var expected = 10; // Arrange var actual = Sub(30,20); // Act expect(actual,expected); // Assert }); test("test to check add method",(){ var expected = 30; // Arrange var actual = Add(10,20); // Act expect(actual,expected); // Asset }); }
Выходные данные — контрольный пример для функции add () проходит, но проверка для subtract () завершается неудачно, как показано ниже.
00:00 +0: test to check sub 00:00 +0 -1: test to check sub Expected: <10> Actual: <9> package:test expect bin\Test123.dart 18:5 main.<fn> 00:00 +0 -1: test to check add method 00:00 +1 -1: Some tests failed. Unhandled exception: Dummy exception to set exit code. #0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:938) #1 _microtaskLoop (dart:async/schedule_microtask.dart:41) #2 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50) #3 _Timer._runTimers (dart:isolate-patch/timer_impl.dart:394) #4 _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:414) #5 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)
Группировка тестовых случаев
Вы можете сгруппировать тестовые случаи, чтобы они добавили больше смысла вашему тестовому коду. Если у вас много тестовых случаев, это поможет написать намного более чистый код.
В данном коде мы пишем контрольный пример для функции split () и функции trim . Следовательно, мы логически группируем эти тестовые случаи и называем это String .
пример
import "package:test/test.dart"; void main() { group("String", () { test("test on split() method of string class", () { var string = "foo,bar,baz"; expect(string.split(","), equals(["foo", "bar", "baz"])); }); test("test on trim() method of string class", () { var string = " foo "; expect(string.trim(), equals("foo")); }); }); }
Выходные данные — к выходным данным будет добавлено имя группы для каждого контрольного примера, как показано ниже —