私はVS 2008の組み込みユニットテストフレームワークでC#ユニットテストを作成しようとしており、テストするメソッドはEnvironment.Exit(0)
です。私のユニットテストでこのメソッドを呼び出すと、私のユニットテストは中止されます。このメソッドは実際には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 - それはあなたがインターセプトし、絶対に何かを模擬することができますそのうち私は承知している唯一のソリューションです。 –
静的メソッドをモックすることができるという危険性は、あなたが簡単にそれらを使用することから離れないことです。私は実際には(私のコードのために)静的メソッドを持つために余分な努力を余儀なくされていることがわかります。これはより良い技術、IMOを使用して開発を強制するのに役立ちます。欠点は、それらの静的メソッドが意味をなされているときに相互作用するとき(またはフレームワークがテストを念頭に置いて構築されていない場合)、フープを突き抜けなければならないことです。 – tvanfosson
@ tvanfosson-それは良い点です。そのため、テスト可能なコードを書くときに静的メソッドを過度に使用することを避けるために、多くの人が(私自身も含めて)なぜそうしようとしています静的な.NETフレームワーククラスは痛みテストであり、開発者はしばしばラッパーコードを記述してテスト可能にする必要があります(回答ごとに)。 ASP.NET WebフォームからASP.NET MVCへの進化から、これは多くのことがわかります。 – RichardOD