LoginSignup
2
2

More than 5 years have passed since last update.

非公開関数のユニットテストについて 再び (C#)

Last updated at Posted at 2018-06-14

非公開関数のユニットテストについて 再び (C#)

前の記事で「PrivateObject クラス を使うとソースを書き換えずテストできますよ。」とコメントをもらったので.

静的メソッドはPrivateType、動的メソッドはPrivateObjectでテストできるようです.
ただ、呼び出しがめんどくさいし、メソッド名がnameofできないので、リネーム機能の適用対象外になるのが辛い.
もちろんテストのためだけにアクセス修飾子を変えるのはどうよと言われるとそれはそれで悩ましいところがありますが、internalの方が気楽な感じがしました.

using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestTarget;

namespace TestTarget
{
    public class Target
    {
        private string value;

        public Target(string value)
        {
            this.value = value;
        }

        private string DynamicMethod()
        {
            return value;
        }

        private static string StaticMethod()
        {
            return "static";
        }
    }
}

namespace UnitTest
{
    [TestClass]
    public class Test
    {
        [TestMethod]
        public void StaticMethodTest()
        {
            Assert.AreEqual("static", new PrivateType(typeof(Target)).InvokeStatic("StaticMethod", null));
        }

        [TestMethod]
        public void DynamicMethodTest()
        {
            var value = "dynamic";
            Assert.AreEqual(value, new PrivateObject(typeof(Target), new object[] { value }).Invoke("DynamicMethod", null));
        }
    }
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2