Dart-Programmierung - Unit-Test

Beim Testen von Einheiten wird jede einzelne Einheit einer Anwendung getestet. Es hilft dem Entwickler, kleine Funktionen zu testen, ohne die gesamte komplexe Anwendung auszuführen.

Der Pfeil external library Der Name "Test" bietet eine Standardmethode zum Schreiben und Ausführen von Komponententests.

Das Testen der Dart-Einheit umfasst die folgenden Schritte:

Step 1: Installing the "test" package

Um Pakete von Drittanbietern im aktuellen Projekt zu installieren, benötigen Sie die pubspec.yamlDatei. Installierentest packagesMachen Sie zuerst den folgenden Eintrag in der pubspec.yaml Datei -

dependencies: 
test:

Klicken Sie nach der Eingabe mit der rechten Maustaste auf pubspec.yamlDatei und Abhängigkeiten erhalten. Es wird das installieren"test"Paket. Unten ist ein Screenshot für das gleiche in derWebStorm Editor.

Pakete können von der installiert werden command lineauch. Geben Sie Folgendes in das Terminal ein -

pub get

Step 2: Importing the "test" package

import "package:test/test.dart";

Step 3 Writing Tests

Tests werden mit der Funktion der obersten Ebene angegeben test()während test assertions werden mit dem gemacht expect()Funktion. Für die Verwendung dieser Methoden sollten sie als installiert werdenpub Abhängigkeit.

Syntax

test("Description of the test ", () {  
   expect(actualValue , matchingValue) 
});

Das group()Funktion kann verwendet werden, um Tests zu gruppieren. Die Beschreibung jeder Gruppe wird am Anfang der Testbeschreibungen hinzugefügt.

Syntax

group("some_Group_Name", () { 
   test("test_name_1", () { 
      expect(actual, equals(exptected)); 
   });  
   test("test_name_2", () { 
      expect(actual, equals(expected)); 
   }); 
})

Beispiel 1: Ein bestehender Test

Das folgende Beispiel definiert eine Methode Add(). Diese Methode akzeptiert zwei ganzzahlige Werte und gibt eine Ganzzahl zurück, die die darstelltsum. Um dies zu testenadd() Methode -

Step 1 - Importieren Sie die test Paket wie unten angegeben.

Step 2 - Definieren Sie den Test mit dem test()Funktion. Hier dastest() Funktion verwendet die expect() Funktion zum Erzwingen einer Behauptung.

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); 
   }); 
}

Es sollte Folgendes erzeugen output - -

00:00 +0: test to check add method 
00:00 +1: All tests passed!

Beispiel 2: Ein fehlgeschlagener Test

Das subtract()Die unten definierte Methode hat einen logischen Fehler. Folgendetest überprüft das gleiche.

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 
   }); 
}

Output - Der Testfall für die Funktion add() besteht aber den Test für subtract() schlägt wie unten gezeigt fehl.

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)

Gruppieren von Testfällen

Sie können die gruppieren test casesdamit es Ihrem Testcode mehr Bedeutung verleiht. Wenn Sie viele habentest cases Dies hilft, viel saubereren Code zu schreiben.

Im angegebenen Code schreiben wir einen Testfall für die split() Funktion und die trimFunktion. Daher gruppieren wir diese Testfälle logisch und nennen sieString.

Beispiel

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")); 
      }); 
   }); 
}

Output - Die Ausgabe fügt den Gruppennamen für jeden Testfall wie unten angegeben hinzu. -

00:00 +0: String test on split() method of string class 
00:00 +1: String test on trim() method of string class 
00:00 +2: All tests passed