MSTestでprivateメソッドをテストする

MSTestでprivateメソッドをテストする方法。

下記のサンプルクラスを使用します。

MyClassは、privateメソッドの”greet”と、staticのprivateメソッド”add”を持ちます。

public class MyClass
{
  private string greet(string name)
  {
    return "Hello " + name;
  }

  private static int add(int a, int b)
  {
      return a + b;
  }
}

privateメソッドのテスト

privateメソッドをテストするには、PrivateObjectクラスのInvokeメソッドを使用します。

[TestMethod]
public void TestGreet()
{
  var myClass = new MyClass();
  var pbObj = new PrivateObject(myClass);
  var actual = (string)pbObj.Invoke("greet", "World");
  Assert.AreEqual("Hello World", actual);
}

テスト対象のインスタンスを引数にして、PrivateObjectのオブジェクトを作成します。

実行するprivateメソッドの名前と、メソッドの引数をInvokeメソッドに渡します。
Invokeメソッドはobjectを返しますので、適切な型に変換します。

private staticのテスト

private staticメソッドをテストするには、PrivateTypeクラスのInvokeStaticメソッドを使用します。

[TestMethod]
public void TestAdd()
{
  PrivateType privateType = new PrivateType(typeof(MyClass));
  int actual = (int)privateType.InvokeStatic("add", 1, 2);
  Assert.AreEqual(3, actual);
}

staticなprivateメソッドをテストするには、テストするクラスを引数にしてPrivateTypeオブジェクトを作成します。

実行するstaticなprivateメソッドの名前と、メソッドの引数をInvokeStaticメソッドに渡します。
InvokeStaticメソッドはobjectを返しますので、適切な型に変換します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です