Ich habe Integrationstest mit MSTest eingerichtet. Meine Integrationstests erstellen gefälschte Daten und fügen sie in die Datenbank ein (echte Abhängigkeiten). Für jedes Business-Objekt, habe ich eine Methode, wie diese, die ein "Fake" erstellt und fügt es in der db:Integrationstest Mülldaten
public static EventAction Mock()
{
EventAction action = Fixture.Build<EventAction>().Create();
action.Add(false);
AddCleanupAction(action.Delete);
AppendLog("EventAction was created.");
return action;
}
ich aufzuräumen alle Fälschungen in [AssemblyCleanup]:
public static void CleanupAllMockData()
{
foreach (Action action in CleanUpActions)
{
try
{
action();
}
catch
{
AppendLog($"Failed to clean up {action.GetType()}. It is possible that it was already cleaned up by parent objects.");
}
}
}
Jetzt habe ich ein großes Problem. In meiner Continuous Integration-Umgebung (TeamCity) haben wir eine separate Datenbank zum Testen und sie bereinigt sich nach jedem Testlauf selbst. In meiner lokalen Umgebung verweisen die Integrationstests jedoch auf meine lokale Datenbank. Nun, wenn ich den Testlauf aus irgendeinem Grund abbricht, hinterlässt dies eine Menge von Mülldaten in meiner lokalen Datenbank, weil CleanupAllMockData() niemals aufgerufen wird.
Was ist der beste Weg, damit umzugehen? Ich konnte keine Möglichkeit finden, die Testannullierung in MSTest abzufangen.
Sie könnten CleanupAllMockData() nach jedem Test ausführen? – Kris
@Kris, zunächst habe ich es in [TestCleanup] ausgeführt, aber eine negative Auswirkung auf die Leistung festgestellt. Der Testlauf dauerte 20 Minuten vs ~ 6 Minuten, Aber wieder, wenn ich den Test absage, würden die Fälschungen nicht aufgeräumt werden. –