2013年12月31日 星期二

UnitTest with private method

VS2010,我們可以使用Test Reference的方法來對private method做單元測試,但在VS2012以後取消了這個架構,以下是測試private method的辦法。

1.  使用PrivateObject

using (CountyRepository repository = new CountyRepository())
{

   PrivateObject accessor = new PrivateObject(repository);
    expected = 1;
   
var returnVal = accessor.Invoke("initialRequestMsg");  // initialRequestMsg
是我們要測試的method name
    actual = (returnVal
as MsgRequestCounty).Data.Count;
   
Assert.AreEqual(expected, actual);
}

=>
注意Invoke的時候可以帶入該method需要的參數

2.  private method改為internal method 並使用[InternalsVisibleTo]屬性

A.   internal method

internal int MyPrivateMethod()
return 1;  }

B.   加入[InternalsVisibleTo] 屬性到該Methodnamespace

using System.Runtime.CompilerServices;
[
assembly: InternalsVisibleTo("Icash.StoreManage.Service.Client.Test")]
namespace Icash.StoreManage.Service.Client

=> InternalsVisibleTo
必須帶入UnitTest projectnamespace


C.   設定完成後,即可在UnitTest呼叫這個internal method



沒有留言:

張貼留言