Übersicht über die Erweiterbarkeit von Daten-Generatoren

Mit Visual Studio Premium oder Visual Studio Ultimate können Sie aussagekräftige Daten für Tests generieren. Mithilfe der integrierten Datengeneratoren können Sie Zufallsdaten generieren, Daten aus vorhandenen Datenquellen generieren und viele Aspekte der Datengenerierung steuern. Wenn die Funktionalität der integrierten Generatoren nicht ausreicht, können Sie benutzerdefinierte Datengeneratoren erstellen. Um benutzerdefinierte Datengeneratoren zu erstellen, verwenden Sie die Klassen im Microsoft.Data.Schema.Tools.DataGenerator-Namespace.

Die Erweiterbarkeits-API für Datengeneratoren

Die Erweiterbarkeits-API stellt Klassen bereit, die Entwickler vererben können. Zusätzlich zu den Klassen enthält die API Attribute, die Sie auf die abgeleiteten Klassen anwenden können. Durch Anwenden dieser Attribute verringern Sie den Umfang an Code, der für allgemeine Zwecke in benutzerdefinierten Generatoren erforderlich ist.

Mit den folgenden drei Verfahren können Sie unter Verwendung der Erweiterbarkeits-API benutzerdefinierte Datengeneratoren erstellen:

Erweiterbarkeit

Description

Schwierigkeitsgrad

Beispiel

Deklarative Erweiterbarkeit

Einfach

Integrierte Ganzzahl-Datengeneratoren

Normale Erweiterbarkeit

Mittel. Diese Methode ist i. d. R. vorzuziehen.

Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Daten-Generators

Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Daten-Generators für eine CHECK-Einschränkung

Basiserweiterbarkeit

  • Erstellen Sie eine Klasse, die die IGenerator-Schnittstelle implementiert.

  • Implementieren Sie alle Methoden, die der Generator erfordert.

  • Erstellen Sie einen benutzerdefinierten Designer für den Generator, der den IDesigner implementiert.

  • Implementieren Sie alle Methoden, die der Designer erfordert.

Schwierig

Keines

Basiserweiterbarkeit

Bei der Basiserweiterbarkeits-API handelt es sich um den Mechanismus, mit dem das Datengenerierungsmodul und die Designer für Datengenerierungspläne interagieren. Diese API ist dafür vorgesehen, folgende Ziele zu erfüllen:

  • Stabilität – Fördern einer konsistenten und stabilen Implementierung sowohl im Entwurfszeit- als auch im Laufzeitmodul.

  • Flexibilität – Unterstützen komplexer Generatoren wie dem datengebundenen Generator.

Ein Entwurfskompromiss bei der Basiserweiterbarkeits-API besteht darin, dass sie komplexer ist als die deklarative Erweiterbarkeits-API höherer Ebene.

Registrieren von benutzerdefinierten Datengeneratoren

Bevor Sie den benutzerdefinierten Datengenerator verwenden können, müssen Sie ihn auf dem Computer registrieren. Wenn Sie den benutzerdefinierten Datengenerator anderen Personen für die Verwendung zur Verfügung stellen, müssen diese den Generator auf ihren Computern registrieren.

Sie können benutzerdefinierte Datengeneratoren mit den folgenden Verfahren registrieren:

Methode

Erforderliche Berechtigungen

Beispiel

Registrieren Sie den Generator im Ordner "Extensions".

Hauptbenutzer oder höher

Erstellen Sie ein Bereitstellungsprojekt zum Registrieren des Generators.

Administrator

  • Keines

Datengeneratoren, Verteilungen und Designer

Sie können benutzerdefinierte Datengeneratoren und benutzerdefinierte Designer für diese Generatoren erstellen. Sie können auch benutzerdefinierte Verteilungen für numerische Datengeneratoren und benutzerdefinierte Designer für diese Verteilungen erstellen.

  • Benutzerdefinierte Datengeneratoren erzeugen zufällige Testdaten nach einem von Ihnen angegebenen Satz von Regeln. Sie können den Standarddesigner mit diesen Generatoren verwenden, oder Sie können einen benutzerdefinierten Designer für diese durch Erben von DefaultGeneratorDesigner erstellen. Der Datengenerator für reguläre Ausdrücke beispielsweise ist ein integrierter Datengenerator, der jedoch einen benutzerdefinierten Designer verwendet, sodass er eine benutzerdefinierte Validierung von Benutzereingaben zur Entwurfszeit ausführen kann.

  • Durch die Verwendung eines benutzerdefinierten Generatordesigners können Sie anpassen, wie Eingabeeigenschaften und Ausgabeeigenschaften vom Benutzer abgerufen werden, Standardwerte festlegen und das Validierungsverhalten angeben.

  • Durch die Verwendung einer benutzerdefinierten Verteilung können Sie die Verteilung numerischer Werte steuern, die ein Datengenerator generiert.

  • Benutzerdefinierte Verteilungsdesigner steuern das Entwurfszeitverhalten für eine benutzerdefinierte Verteilung. Dieses Verhalten umfasst das Abrufen der Namen für die Eingabeeigenschaften der Verteilung, das Festlegen der Standardwerte für die Eingabeeigenschaften und die Validierung der Werte für die Eingabeeigenschaften der Verteilung.

Datengeneratoren und Lokalisierung

Die Datengeneratoren in Visual Studio Premium und Visual Studio Ultimate  sind lokalisiert, da Visual Studio mehrere Sprachversionen umfasst. Es ist wahrscheinlich nicht erforderlich, die benutzerdefinierten Datengeneratoren zu lokalisieren. Wenn Sie einen Datengenerator erstellen müssen, der lokalisiert wird, sollten Sie einen benutzerdefinierten Designer erstellen. Sie können auch die GetInputs-Methode überschreiben, um die Namen der Eingabeeigenschaften zu lokalisieren.

Tipp

Erben Sie nach Möglichkeit von der DefaultGeneratorDesigner-Klasse und implementieren Sie nicht die IDesigner-Schnittstelle, um zusätzlichen Aufwand zu vermeiden.

Instanziieren von Datengeneratoren

Benutzerdefinierte Datengeneratoren können Daten freigeben. Der Bereich der freigegebenen Daten liegt zwischen Generatortyp und Datenbanktabelle. Alle Generatortypen weisen ein eindeutiges Instanzwörterbuch für die einzelnen Datenbanktabellen auf. Beispielsweise verfügt ein benutzerdefinierter Datengenerator für eine Tabelle mit dem Namen Customers über den Zugriff auf ein freigegebenes Wörterbuch. Sie können dem Wörterbuch beliebige Informationen hinzufügen und diese freigeben. Das Wörterbuch stellt garantiert dieselbe Instanz für alle Generatortypen und Tabellen dar. Sie können beispielsweise einen benutzerdefinierten Datengenerator erstellen und das Wörterbuch von GeneratorInit anfordern. Dann können Sie überprüfen, ob das Wörterbuch freigegebene Informationen enthält. Wenn dies der Fall ist, können Sie die Informationen verwenden, um Daten zu generieren. Außerdem können Sie freigegebene Informationen erstellen, die andere Instanzen des Generators verwenden können.

Tipp

Das Instanziieren von Generatoren ist ein fortgeschrittenes Verfahren. Sie können mithilfe der Generatorinstanziierung einen benutzerdefinierten Daten-Generator erstellen, der CHECK-Einschränkungen auf der anderen Seite von Spalten behandelt, z. B. eine CHECK-Einschränkung, die erfordert, dass eine Spalte größer als eine andere Spalte ist.

Die Datengenerierung

Die Datengenerierung erfolgt in den folgenden Phasen:

Bestimmen des Designertyps

Entwurfszeit

In dieser Phase ist der Typ des Datengenerators als Eingabe erforderlich. Das Modul kann dann das GeneratorAttribute abfragen, um den Designertyp abzurufen. In den meisten Fällen wird das GeneratorAttribute von der Basisklasse geerbt, die den Standarddesigner angibt.

Instanziieren und Initialisieren des Designers

Entwurfszeit

Der Designer wird instanziiert. Der Designer wird durch Aufrufen von Initialize und Übergeben des Generatortyps als Argument initialisiert.

Abrufen der Eingabedeskriptoren

Entwurfszeit

Der InputDescriptor wird vom Designer abgerufen. Hierzu ruft der Standarddesigner alle Eigenschaften des Datengenerators ab, die mit dem InputAttribute gekennzeichnet sind.

Festlegen der Standardwerte

Entwurfszeit

Die Standardwerte werden festgelegt.

Abrufen der Generatorausgabebeschreibungen

Entwurfszeit

Der OutputDescriptor wird vom Designer abgerufen. Der Standarddesigner verwendet Eigenschaften, die mit dem OutputAttribute markiert sind, um die Beschreibungen zu erstellen, die im Fenster Spaltendetails in der Spalte Generatorausgabe angezeigt werden.

Instanziieren des Generators

Laufzeit

Der Datengenerator wird unter Verwendung des Standardkonstruktors instanziiert.

Festlegen der Eingaben für den Generator

Laufzeit

Im Datengenerator werden alle Eingabewerte über die Eingabedeskriptoren festgelegt, die aus dem Designer abgerufen werden.

Überprüfen des Generators

Laufzeit

Die ValidateInputs-Methode wird aufgerufen. Bei einem Validierungsfehler löst der Generator eine InputValidationException-Ausnahme aus. Abgesehen von Datenvalidierungsausnahmen werden alle Ausnahmen als nicht behebbare Fehler behandelt.

Initialisieren des Generators

Laufzeit

Die Initialize-Methode wird aufgerufen. Dieser Schritt ermöglicht es dem Datengenerator, die erforderlichen Setupprozeduren vor der Datengenerierung auszuführen, z. B. Angeben der Verbindungszeichenfolge für die Zieldatenbank oder Festlegen des Startwerts für den Zufallszahlengenerator. Diese Phase wird ein Mal ausgeführt, bevor die Datengenerierung ausgeführt wird.

Ausführen der Datengenerierung

Laufzeit

In dieser Phase werden neue Ergebnisse generiert, indem die GenerateNextValues-Methode aufgerufen wird. Die Ergebnisse können mit der GetOutputValue-Methode abgerufen werden. Diese Methode ruft einen Skalarwert vom Generator ab, der dem Ausgabeschlüssel entspricht, der als Eingabe an den Generator übergeben wird. In dieser Phase werden die Ergebnisse durchlaufen, bis alle gewünschten Ergebnisse generiert wurden.

Bereinigen

Laufzeit

Nachdem die gesamte Datengenerierung abgeschlossen wurde, wird Dispose aufgerufen, um den Generator zu bereinigen.

Siehe auch

Aufgaben

Gewusst wie: Erstellen von benutzerdefinierten Daten-Generatoren

Exemplarische Vorgehensweise: Erstellen eines benutzerdefinierten Daten-Generators

Referenz

Microsoft.Data.Schema.DataGenerator

Konzepte

Generieren spezialisierter Testdaten mit einem benutzerdefinierten Daten-Generator