Ich versuche, eine C# Unit-Test mit VS 2008 integrierten Unit-Test-Framework und die Methode, die ich testen Anrufe Environment.Exit(0)
schreiben. Wenn ich diese Methode in meinem Komponententest anrufe, wird mein Komponententest abgebrochen. Die Methode sollte in der Tat aufrufen Exit
, und ich möchte eine Möglichkeit, das zu testen, und auch den Exit-Code, den es verwendet, zu testen. Wie könnte ich das tun? Ich schaute auf Microsoft.VisualStudio.TestTools.UnitTesting Namespace, aber sah nichts, das relevant erschien.VS2008 Unit-Tests - Assert-Methode Exits
[TestMethod]
[DeploymentItem("myprog.exe")]
public void MyProgTest()
{
// Want to ensure this Exit's with code 0:
MyProg_Accessor.myMethod();
}
Inzwischen ist hier der Kern des Code, den ich testen will:
static void myMethod()
{
Environment.Exit(0);
}
Edit: hier ist die Lösung, die ich in meiner Test-Methode verwendet, dank RichardOD:
Process proc;
try
{
proc = Process.Start(path, myArgs);
}
catch (System.ComponentModel.Win32Exception ex)
{
proc = null;
Assert.Fail(ex.Message);
}
Assert.IsNotNull(proc);
proc.WaitForExit(10000);
Assert.IsTrue(proc.HasExited);
Assert.AreEqual(code, proc.ExitCode);
+1 auf TypeMock Trenner hier - es ist die einzige Lösung ist, ich bin mir dessen bewusst, die Sie abfangen können und absolut alles verspotten. –
Die Gefahr, statische Methoden zu verspotten, besteht darin, dass Sie sich nicht davon abhalten lassen, sie so einfach zu benutzen. Ich finde wirklich, dass (für meinen Code) gezwungen wird, extra hart zu arbeiten, um statische Methoden zu haben, ist eine gute Sache, da ich sie nicht verwenden werde, wenn sie nicht die absolut beste Lösung sind. Dies hilft, die Entwicklung mit besseren Techniken, IMO, zu erzwingen. Der Nachteil ist, dass Sie gezwungen sind, durch Ringe zu springen, wenn Sie mit diesen statischen Methoden interagieren, wenn sie sinnvoll sind (oder das Framework ist nicht auf Tests aufgebaut). – tvanfosson
@ tvanfosson- Das ist ein guter Punkt. Deshalb versuchen viele Leute (mich eingeschlossen) zu vermeiden, statische Methoden beim Schreiben von testbarem Code zu verwenden. .NET-Framework-Klassen, die statisch sind, sind ein Pain-Test, und Entwickler müssen oft darauf zurückgreifen, Wrapper-Code zu schreiben, um ihn testbar zu machen (gemäß Ihrer Antwort). Sie können dies aus der Entwicklung von ASP.NET-Webformularen zu ASP.NET MVC sehen. – RichardOD