2010-08-05 10 views
9

In .NET (C#) gibt es irgendwelche Vorteile/Nachteile zu Debug/Release-Build für Unit-Tests gehen?Unit-Test auf einem Build-Server: Release oder Debug-Code?

Welche Zielkonfiguration wird normalerweise für Komponententests auf einem Build-Server verwendet? Ist es wichtig?

Was ist mit Code-Abdeckung (für diese hier sind vermutlich Debug-Versionen erforderlich).

Antwort

8

Ich würde empfehlen, den Freischaltcode auszuführen. Aus ein paar Gründen.

1) Es ist der Code, den die Kunden verwenden werden.

2) Einige Codes haben spezielle Debug-Bedingungen, die Unterschiede zwischen den Debug- und Release-Builds erzeugen.

3

Sie müssen den Code so testen, wie er letztendlich auf dem Clientcomputer ausgeführt wird. In den meisten normalen Bereitstellungsszenarien wird Code in der Release-Konfiguration kompiliert.

+0

Wir implementieren Debug-Versionen unseres Codes, so dass wir den gesamten Stack-Trace sehen können, wenn ein Problem auftritt. Natürlich wird unser gesamter Code nur intern verwendet. – mpenrow

+0

Ihnen ist bekannt, dass der Release-Build auch einen vollständigen Stack-Trace erzeugt? Sie erhalten Zeilennummern, wenn Sie die PDB-Dateien kopieren. –

+0

Wenn Sie "optimize code" auswählen (was normalerweise bei Release-Build der Fall ist), kann die Methode nicht inline eingezogen werden oder sich leicht bewegen, was dazu führen würde, dass der Zeilennummernverweis etwas irreführend ist? – Benoittr

1

Es ist einfacher (für mich), zum Stamm einer Ausnahme zu gelangen, wenn Debug-Code getestet wird.

2

Ich würde Release-Build verwenden, wenn möglich, um alles so nah wie möglich an das Endprodukt zu bekommen.

Es gibt kleine Unterschiede zwischen Debug-Modus und Release-Modus, die normalerweise nur für die Leistung, aber nicht für das Ergebnis sorgen. Wenn es jedoch einige Zeitprobleme mit dem Code gibt, werden sie möglicherweise nur im Freigabemodus angezeigt, sodass Sie die Gelegenheit nutzen könnten, diese möglicherweise zu erfassen.

2

Obwohl die meisten Leute offensichtlich den Unitcode testen wollen, frage ich mich, ob der Debug-Build mehr Fehler aufdecken könnte. (Ich könnte mich irren)

z. afaik im VS-Debug-Code, werden nicht initialisierte Variablen zu einem schrecklichen Wert gezwungen, anstatt 0 "zufällig" zu sein. Vielleicht in .NET macht es keinen großen Unterschied, aber für mich, hauptsächlich algorithmischen Kern-Code in C++, kann dies entscheidend sein.

Ich freue mich auf irgendwelche aufschlussreichen Kommentare;).

1

Nur einen weiteren Grund hinzufügen, um im Freigabemodus zu testen. Einige CI-Dienste (Appveyor) schlagen beim Erstellen fehl, wenn sie auf einen -Aufruf stoßen, obwohl der Test selbst grün ist.

Verwandte Themen