【MS-Test】【C#】private に関するテスト

■ private のコンストラクタに関するテスト

構文

var privateInstance = (【対象クラス】)Activator.CreateInstance(typeof(【対象クラス】), true);

参考文献

http://cookie40000.hatenablog.com/entry/2016/04/06/203437
https://stackoverflow.com/questions/15663983/c-sharp-unit-testing-class-with-a-private-constructor

■ private のメソッド/プロパティに関するテスト

 * PrivateObjectクラスの...
  + メソッドであれば、Invoke() を使用する
  + プロパティであれば、Get・SetFieldOrProperty/Get・SetStaticProperty etc を使用する
[[https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.visualstudio.testtools.unittesting.privateobject?view=mstest-net-1.2.0]]

サンプル

[TestMethod]
public void PrivateMethodTest()
{
  var targetClass = new DemoClass();
  var privateInstance = new PrivateObject(targetClass);
  var actual = (string)privateInstance.Invoke("SayHello", new object[] { "Hello", "World" });
  Assert.AreEqual("Hello World", actual);
}

参考文献

https://www.gesource.jp/weblog/?p=7742

■ private static のメソッド/プロパティに関するテスト

 * PrivateTypeクラスのInvokeStatic() を使用する

サンプル

[TestMethod]
public void PrivateStaticMethodTest()
{
  var target = new PrivateType(typeof(DemoClass));
  var result = target.InvokeStatic("SayHello", "Mike");
  Assert.AreEqual("Hello, Mike", result);
}

参考文献

https://teratail.com/questions/28151

■ private の定数を参照するには...

構文

PrivateType privateType = new PrivateType(typeof(対象クラス));
var 定数を受ける変数 = (データ型)privateType .GetStaticField("定数名");

サンプル

PrivateType privateType = new PrivateType(typeof(SampleClass));
var const = (string)privateType .GetStaticField("DummyConstN");

参考文献

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14181335214

関連記事

MS-Test

MS-Test あれこれ
https://blogs.yahoo.co.jp/dk521123/18458247.html
単体試験で外部ファイル(CSVなど)からデータを取得する
https://blogs.yahoo.co.jp/dk521123/31885401.html
ファイルを使う機能の単体試験について
https://blogs.yahoo.co.jp/dk521123/31532337.html