Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9749

MsTestのprivateメンバ操作

$
0
0

テスト対象

/// <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,"ヨシッ!");}

Viewing all articles
Browse latest Browse all 9749

Trending Articles