====== テストフレームワーク ====== .NET系のテストフレームワークには、大きく3種類(MsTest・NUnit・xUnit)がある。\\ Visual Studioで標準搭載されているのが「MsTest」、他はNuGetでインストールできる。 ===== MsTest ===== - ユニットテスト用のプロジェクトを作成 * [新規作成]→[プロジェクト]から、テストプロジェクト/プロジェクト名を指定します。 - テスト対象 の参照を追加 * ユニットテストプロジェクトに、テスト対象(TargetApp)の参照を追加します。 [[https://www.softech.co.jp/mm_170301_pc.htm|「WindowsアプリケーションにおけるMSTestの活用」]] ==== プライベートメソッド ==== プライベートメソッドは非公開のため通常ではアクセスできないが、単体テストするにはアクセスする必要がある。 === 非静的 ==== クラスライブラリなどインスタンスを生成してメソッドを呼ぶ\\ PrivateObjectを使用する。 var cls1 = new Class1(); var pbObj = new PrivateObject(cls1); ret = (string)pbObj.Invoke("AddPrivate", 1, 2); * [[https://qiita.com/tera1707/items/c1d4dee3611bb693dd10|[C#]private、internalなメソッドのUnitTest]] * [[https://qiita.com/kojimadev/items/92c1ac05a6ec4afb35a3|C#でprivateメソッドをテストする時の便利な書き方(実装の都合をテストコードから排除)]] === 静的 ==== コンソールアプリケーションでは、静的になっていることが多い\\ PrivateTypeを使用する。 [[https://teratail.com/questions/28151|statcクラスのprivateメソッドのテストを実施したい]] > namespace TestFuga { public class Program { private static string GetHoge() { return "Hoge"; } } } namespace UnitTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { var target = new PrivateType(typeof(TestFuga.Program)); var result = target.InvokeStatic("GetHoge", null); Assert.AreEqual("Hoge", result); } } }