====== テストフレームワーク ======
.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);
}
}
}