Ich bin auf der Suche nach einigen Ratschlägen für Unit-Testing in einer Weise, die nicht verlassen "Test-Haken" in Ort in der Produktion Code.
Nehmen wir an, ich habe eine statische Klasse (VB.NET-Modul) namens MethodLogger, die eine Methode "void WriteEntry(string Message)" hat, die die aufrufende Methode und eine Nachricht in eine Protokolldatei auf der Festplatte schreiben soll. Das eigentliche Ziel von WriteEntry() kann auf eine Fake-Implementierung von IMethodLogger umgeleitet werden, um Unit-Tests durchzuführen, und für todos in anderen Fällen sollte es die eigentliche Implementierung von IMethodLogger aufrufen.
Hier ist ein grober Schnitt von dem, was ich bis jetzt ausgeheckt habe, und ich mag den Ansatz - aber in einigen schnellen Tests wirft er einige Fragen und Zweifel auf:
[InternalAttributesVisibleTo("MethodLogger.Tests")]
internal static class MethodLogger
{
public void WriteEntry(string message)
{
LogWriter.WriteEntry(message);
}
private IMethodLogger LogWriter
{
get;
set;
}
#if DEBUG
internal void SetLogWriter(IMethodLogger logger)
{
LogWriter = logger;
}
#endif
}
Hier sind meine konkreten Fragen:
-
Diese eng Paare die Unit-Tests gegen die DEBUG-Build ausgeführt; wenn ich Unit-Tests ausführen, obwohl es scheint, dass es nicht speziell die Baugruppe unter Test in DEBUG neu erstellen--ist es möglich, dies zu tun?
- Würde ich die Unit-Tests jemals gegen einen nicht-debuggen Build laufen lassen wollen? Von der Spitze von meinem Kopf sehe ich weniger Wert - aber würde es sein?
- Wäre es für mich möglich, ein benutzerdefiniertes Pre-Compiler-Flag wie "TEST" anstelle von "DEBUG" zu verwenden? Wie würde ich Visual Studio anweisen, das Ziel immer neu zu erstellen? mit diese Flagge zum Testen, um sicherzustellen, dass meine Haken/Nähte verfügbar sind?