我试图用VS 2008的内置单元测试框架和我正在测试的方法调用Environment.Exit(0)
来编写C#单元测试。当我在单元测试中调用此方法时,我的单元测试被中止。该方法确实应该调用Exit
,我想要一种方法来测试它的功能,并且测试它使用的退出代码。我该怎么做?我看着Microsoft.VisualStudio.TestTools.UnitTesting Namespace,但没有看到任何看起来相关的东西。VS2008单元测试 - 断言方法退出
[TestMethod]
[DeploymentItem("myprog.exe")]
public void MyProgTest()
{
// Want to ensure this Exit's with code 0:
MyProg_Accessor.myMethod();
}
同时,这里就是我想测试代码的要点:
static void myMethod()
{
Environment.Exit(0);
}
编辑:这里是我在我的测试方法中使用的解决方案,这要归功于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 TypeMock隔离在这里 - 这是我知道它可以让你拦截和嘲笑绝对什么的唯一解决方案。 – 2009-07-13 20:07:52
能够嘲讽静态方法的危险在于,你不会像使用它们那样容易地使用它们。实际上,我发现(对于我的代码)被迫花费更多的精力来使静态方法成为一件好事,因为除非它们是绝对最佳解决方案,否则我不会使用它们。这有助于使用更好的技术强制开发IMO。不利的一面是,当他们确实有意义时(或者没有考虑测试构建框架),当你与这些静态方法进行交互时,你就不得不跳出箍臼。 – tvanfosson 2009-07-13 20:15:22