Verwendung von Testdaten

Im Rahmen von Unit Tests können auch Testdaten für eine generierte Schlüsseltabelle verwendet werden. Analog zum Bausteinaufruf, kann für eine Schüsseltabellen-Instanz, bzw. alle Instanzen einer Schlüsseltabelle, eine Mockup Funktion registriert werden, die die Einträge für die Schlüsseltabelle liefert. Diese Funktion bekommt die Schlüsseltabellen-Instanz und Informationen über den Testlauf des Unit Test übergeben, und kann dann selbst entscheiden, welche Daten für diese Schlüsseltabelle in dem jeweiligen Testlauf verwendet werden, bzw. wo die Daten herkommen.

Mockup Funktion

Die Funktion, die die Testdaten für eine generierte Schlüsseltabelle liefert, hat folgende Signatur:

TRec[] MockupFunction(T table, ModuleUnitTestAttribute unitTest);
	where T : Reftab.Base<T, TRec>
	where TRec : struct

Das Typargument T ist der generierte Datentyp für die Schlüsseltabelle, und das Typargument TRec ist der generierte Datentyp für einen Eintrag in der Schlüsseltabelle.

Die Funktion bekommt 2 Argumente übergeben. Das Argument table ist eine Referenz auf die Schlüsseltabellen-Instanz, für die Testdaten verlangt werden. Das Argument unitTest ist eine Referenz auf das ModuleUnitTestAttribute, wofür die Mockup Funktionen gerufen wird.

Sie wird aufgerufen, wenn die Einträge für table verlangt werden, und liefert die Einträge zurück, welche für den Unit Test verwendet werden sollen. In der Funktion kann auf den Originaleinträge von table zugegriffen werden, um z.B. eine eingeschränkte Menge von bzw. angepasste Originaleinträge zurückzuliefern.

Hier ein Beispiel für eine Mockup-Funktion für die Schlüsseltabelle GEVO-STATUS (VOGST):

private static GevoStatusRec[] MockupTest_Mock(GevoStatus table, ModuleUnitTestAttribute unitTest)
{
    if (unitTest.Tag == "extern") {
        // Lese XML datei/datenbank/mdb/....
        return LeseDaten();
    }
 
    if (unitTest.Tag == "replace") {
        // Nehme normale Daten mit Anpassungen
        return table
            .Select(row => row.GevoStArtK == "1" && row.GevoStArtRst == "0"
                        ? GevoStatus.CreateRow(row.GevoStArtK, row.GevoStArtRst, "xZuge", "xZugeordnet", row.GevoStK, row.GevoKz)
                        : row)
            .ToArray();
    }
 
    // liefere fest verdrahte Daten
    return [
        GevoStatus.CreateRow("1", "0", "Zuge", "Zugeordnet", "10", "N"),
        GevoStatus.CreateRow("1", "1", "Bat", "Batchverarbeitung anstehend", "11", "N"),
        GevoStatus.CreateRow("1", "2", "Ibea", "in Bearbeitung", "12", "N"),
        GevoStatus.CreateRow("1", "3", "Zbea", "Weitergeleitet", "13", "N"),
        GevoStatus.CreateRow("1", "8", "Fehl", "Fehler", "18", "N"),
        GevoStatus.CreateRow("2", "0", "Wvl", "Wiedervorlage", "20", "J"),
        GevoStatus.CreateRow("2", "1", "WvlE", "Eingang/Wiedervorlage", "21", "N"),
        GevoStatus.CreateRow("3", "0", "Aban", "zur Abarbeitung anstehend", "30", "N"),
        GevoStatus.CreateRow("8", "8", "Abbr", "Abbruch", "88", "N"),
        GevoStatus.CreateRow("9", "0", "Undu", "Undurchführbar", "90", "J"),
        GevoStatus.CreateRow("9", "4", "Gelö", "Gelöscht", "94", "J"),
        GevoStatus.CreateRow("9", "8", "Erl", "Erledigt", "98", "J"),
    ];
}
Die statische Methode CreateRow, die hier verwendet wird, um einen Eintrag für die Schlüsseltabelle zu erstellen, kann nur in bzw. unterhalb der Mockup Funktion aufgerufen werden, während ein Unit Test ausgeführt wird. In alle anderen Fällen wird eine InvalidOperation-Ausnahme aufgeworfen.

Und hier ein Beispiel, wie diese Mockup-Funktion in einem Module Unit Test verwendet wird:

private void MockupTest_prepare()
{
	this.Test.RegisterMockup<GevoStatus, GevoStatusRec>(MockupTest_Mock);
}
private void MockupTest_cleanup()
{
	this.Test.UnregisterMockup<GevoStatus, GevoStatusRec>();
}
[ModuleUnitTest(description: "Test mit extern Daten", tag: "extern")]
[ModuleUnitTest(description: "Test mit angepassten Daten", tag: "replace")]
[ModuleUnitTest(description: "Test mit fest verdrahten Daten")]
private void MockupTest()
{
	var table = GevoStatus.New();
	var contains = table.Contains("2", "0");
}

Registrierung

An der Klasse TestSupport sind Methoden definiert, um eine Mockup-Funktion für einen Unit Test zu registrieren. Sie können nur während eines Unit Test bzw. in der ''prepare''/''cleanup'' Methoden für einen Unit Test verwendet werden. In allen anderen Fällen wird eine Condition (ZZTAAIM2(72), bzw. ZZTAAIM2(80)) aufgeworfen.

RegisterMockup

bool RegisterMockup<T, TRec>(T table, Func<T, ModuleUnitTestAttribute, TRec[]> mockFunc);
	where T : Reftab.Base<T, TRec>
	where TRec : struct
bool RegisterMockup<T, TRec>(Func<T, ModuleUnitTestAttribute, TRec[]> mockFunc);
	where T : Reftab.Base<T, TRec>
	where TRec : struct

Registriert eine Mockup-Funktion für eine generierte Schlüsseltabellen-Instanz, bzw. alle Instanzen einer generierten Schlüsseltabelle.

UnregisterMockup

bool UnregisterMockup<T, TRec>(T table);
	where T : Reftab.Base<T, TRec>
	where TRec : struct
bool RegisterMockup<T, TRec>();
	where T : Reftab.Base<T, TRec>
	where TRec : struct

Entfernt eine vorher registrierte Mockup-Funktion für eine generierte Schlüsseltabellen-Instanz, bzw. alle Instanzen einer generierten Schlüsseltabelle.

reftab:dotnet:funcmock · Zuletzt geändert: 07.10.2025 08:19

Copyright © 1992-2025 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum