テスト対象
/// <summary>/// テスト対象クラス/// </summary>publicclassTestTargetClass{/// <summary>/// Privateメンバ変数/// </summary>privateint_privateMember=0;/// <summary>/// PrivateStaticメンバ変数/// </summary>privatestaticstring_privateStaticMember="";/// <summary>/// Publicメソッド/// </summary>/// <param name="param"></param>/// <returns></returns>publicintPublicMethod(intparam){returnparam+1;}/// <summary>/// Privateメソッド/// </summary>/// <param name="val1"></param>/// <param name="val2"></param>/// <returns></returns>privateintPrivateMethod(intval1,intval2){return_privateMember+val1+val2;}/// <summary>/// Privateメソッド(非同期)/// </summary>/// <param name="val1"></param>/// <param name="val2"></param>/// <returns></returns>privateasyncTask<int>PrivateMethodAsync(intval1,intval2){awaitTask.Delay(0);returnval1+val2;}/// <summary>/// PrivateStaticメソッド/// </summary>/// <returns></returns>privatestaticstringGetPrivateStaticMember(){return_privateStaticMember;}}テストコード
Publicメソッド
通常ケース
[TestMethod()]publicvoidPublicMethodTest(){varinstance=newTestTargetClass();varret=instance.PublicMethod(1);Assert.AreEqual(ret,2);}Privateメソッド+Privateメンバ変数
PrivateObjectのSetFieldOrProperty()でメンバ変数を変更.
またはSetField(),SetProperty().
privateObject.Invoke()でメソッド呼び出し.第2引数以降で呼び出したいメソッドの引数を設定.
[TestMethod()]publicvoidPrivateMethodTest(){varinstance=newTestTargetClass();varprivateObject=newPrivateObject(instance);// メンバ変数値変更privateObject.SetFieldOrProperty("_privateMember",100);// Privateメソッド呼び出しvarret=privateObject.Invoke("PrivateMethod",100,200);Assert.AreEqual(ret,300);}Privateメソッド(非同期)
呼び出しを戻り値の型でくるんでawait.
[TestMethod()]publicasyncTaskPrivateMethodAsyncTest(){varinstance=newTestTargetClass();varprivateObject=newPrivateObject(instance);// 戻り値の型でくるんでawaitvarret=await(privateObject.Invoke("PrivateMethodAsync",100,200)asTask<int>);Assert.AreEqual(ret,300);}PrivateStaticメソッド+PrivateStaticメンバ変数
PrivateTypeのSetStaticFieldOrProperty()とInvokeStatic()を使用.
基本は通常のPrivateのときと同じ.
[TestMethod()]publicvoidGetPrivateStaticMemberTest(){varprivateType=newPrivateType(typeof(TestTargetClass));// static変数値変更privateType.SetStaticFieldOrProperty("_privateStaticMember","ヨシッ!");// staticメソッド呼び出しvarret=privateType.InvokeStatic("GetPrivateStaticMember");Assert.AreEqual(ret,"ヨシッ!");}