Учебники

Программирование дротиков — модульное тестирование

Модульное тестирование включает в себя тестирование каждого отдельного модуля приложения. Это помогает разработчику тестировать небольшие функциональные возможности без запуска всего сложного приложения.

Внешняя библиотека 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")); 
      }); 
   }); 
} 

Выходные данные — к выходным данным будет добавлено имя группы для каждого контрольного примера, как показано ниже —