Datei helper test.dart

Aus Info-Theke
Version vom 5. Januar 2021, 02:01 Uhr von Hamatoma (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= Link = * Projekt dgrep = Zielsetzung = Die Datei helper_test.dart enthält die Unittests der Datei helper.dart. Für jede Funktion aus helper.dart…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Link

Zielsetzung

Die Datei helper_test.dart enthält die Unittests der Datei helper.dart.

Für jede Funktion aus helper.dart existiert mindestens ein Test.

Import

import 'dart:io';
import 'package:dgrep/helper.dart';
import 'package:test/test.dart';
import 'package:args/args.dart';
import 'package:path/path.dart' as path;
  • import 'package:dgrep/helper.dart'; Damit kennt der Parser die Definitionen aus helper.dart.
  • Die anderen Importe betreffen das interne Paket dart:io und die externen Pakete args, test und path.
  • import 'package:path/path.dart' as path;
    • Es gibt folgendes Problem: die Pakete test und path enthalten jeweils eine Funktion equals().
    • Zur Auflösung des Konflikts wird der Zugriffsname path (hinter as) definiert, das bedeutet dass alle Zugriffen auf Namen aus dem Paket mit einem path. erfolgen müssen, beispielsweise <path.join().
    • Der Zugriffsname könnte auch blabla heißen, per Konvention wird aber der Paketname verwendet.

Die Tests

void main() {
 group('argument handling', () {
    test('testIntArguments', () {
      final parser = ArgParser();
      parser.addOption('count');
      parser.addOption('positive-number');
      parser.addFlag('recursive');
      final result = parser
          .parse(['--positive-number', '33', '--recursive', '--count=nix']);
      var message;
      expect(
          testIntArguments(
              result, ['positive-number'], (error) => message = error),
          true);
      expect(
          testIntArguments(
              result, ['positive-number', 'count'], (error) => message = error),
          false);
      expect(message, contains('count is not an integer: nix'));
    });
    test('testRegExpArguments', () {
... 
    });
  });
  test('regExpEscape', () {
    expect(regExpEscape('()[]{}?*+-|^\$\\.&~# '), equals('\\(\\)\\[\\]\\{\\}\\?\\*\\+\\-\\|\\^\\\$\\\\\\.\\&\\~\\#\\ '));
    expect(regExpEscape('abc.123'), equals(r'abc\.123'));
    expect(regExpEscape(''), equals(r''));
    expect(regExpEscape(null), isNull);
  });
  ...
}
  • group('argument handling', () { Es wird eine Gruppe definiert, die laut Beschreibung die Argumentbehandlung testet, das sind zwei Funktionen testIntArguments() und testRegExpArguments().
  • final parser = ArgParser(); Damit beginnt die Vorbereitung auf den Test: ein ArgParser-Objekt wird instantiiert.
  • Es werden drei Optionen eingetragen, eines davon ist ein Flag (Boolsche Option).
  • result = parser.parse(['--positive-number', '33', '--recursive', '--count=nix']);
    • Der Parser untersucht die übergebene Argumentliste auf Optionen.
    • Das Ergebnis ist ein Objekt vom Typ ArgResults, das als Parameter für die zu testenden Funktionen testIntArguments() und testRegExpArguments() gebraucht wird.
  • Damit ist die Vorbereitung eines "vernünftigen" Tests fertig.
  • Die Funktion expect() hat als ersten Parameter den zu testenden Wert, als zweiten den erwarteten Wert.
    • Wir testen den Aufruf von testIntArguments() und erwarten den Wert true, da die Option "--positive-number" korrekt benutzt wurde.
    • Im zweiten Aufruf wird mit dem Parameter count eine Option getestet, die mit dem String nix falsch vewendet wurde, wir erwarten also als Funktionsergebnis von testIntArguments den Wert false.
  • Der dritte Parameter von testIntArguments() ist eine Callbackfunktion, die eine Fehlermeldung als Parameter übergeben bekommt. In unserem Test speichern wir diese Meldung in der lokalen Variablen message.
  • expect(message, contains('excluded: error in regular expression'));
    • Hier wird die obige Variable auf die korrekte Fehlermeldung untersucht.
  • Nach der Gruppe folgen Tests, die keine Gruppe haben. Das ist korrekt.
  • Der erste Test außerhalb der Gruppe hat die Beschreibung 'regExpEscape'.
  • Zuerst werden alle Metazeichen auf einmal getestet, ob alle mit dem vorausgehenden Gegenstrich markiert werden.
  • Danach folgt der Test von einem gängigen Beispiel mit und ohne Metazeichen.
  • Es folgen zwei Tests mit Grenzbereichen, dem Leerstring als Parameter und der null.