Testprozess.Starten?
Bin ich erstellen, eine Anwendung, verwalten Sie mehrere Instanzen von einem externen Dienstprogramm, versorgen jeden mit den Daten und dem abrufen der Ergebnisse.
Aber wie Schreibe ich unit-tests für die Klasse stieß ich auf ein problem.
Wie testen Sie, dass die Ziel-Methode tatsächlich einen Prozess startet (über eine Eigenschaft), wenn Sie aufgerufen?
Habe ich versucht:
- Der Klasse ausführen eines externen Prozesses zu verwenden und dann GetProcessesByName zu prüfen, ob es begonnen hat.
- Verwenden Umlenkung der Ausgabe, z.B. mit dem größer-als-Zeichen auf der echo-etwas in eine Datei und testen Sie seine Existenz
Fühle ich mich wie emitting code und/oder dem erstellen noch eine andere exe zum testen ist übertrieben.
Dies ist die genaue Methode:
public void Start()
{
if (!_isRunning) {
var startInfo = new ProcessStartInfo() {
CreateNoWindow = true,
UseShellExecute = true,
FileName = _cmdLine,
Arguments = _args
};
_process = Process.Start(startInfo);
_isRunning = true;
} else {
throw new InvalidOperationException("Process already started");
}
}
Möchte ich unit-Tests ist es so, dass, wenn nichts läuft (_isRunning == false), wird ein neuer Prozess erzeugt.
Fühle ich mich ratlos, ist es ein eleganter Weg, um unit-test, dass ein externer Prozess tatsächlich beginnt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde diesen Ansatz der Verwendung von dependency-injection, und verwenden Sie eine fake oder mock-Klasse. Hinweis: ich bin mit der Instanz-Methode für den start statt der Methode der Klasse. Regelmäßig In Ihrem code, können Sie den Standard-Konstruktor auf und es wird ein Prozess für Sie. Zum Test können Sie injizieren eine nachgemachte oder gefälschte Prozess und einfach überprüfen, dass die richtigen Methoden aufgerufen werden, die auf Ihrem mock-Objekt und nie haben, um tatsächlich einen Prozess starten, an alle. Passen Sie dieses auf die Berücksichtigung der Eigenschaften habe ich weggelassen. Ex. unten:
Test-code...
public UtilityManager() : this(null) {} public UtilityManager( Process process )
zupublic UtilityManager( Process process = null )
für kürzeren code.UtilityProcess
nennenStart()
Methode?UtilityProcess
ist eine Instanz &Start()
ist eine statische Methode!!