C# を使用して、コントローラーのアクションを単体テストし、それらが戻るまでの時間を計ろうとしています。VS2012 Ultimate に組み込まれている単体テスト フレームワークを使用しています。
残念ながら、私はまた、TestContext とその使用方法について頭を悩ませようとしています..
いくつかのサンプル コード (私のコントローラー アクション):
[HttpPost]
public JsonResult GetUserListFromWebService()
{
JsonResult jsonResult = new JsonResult();
WebService svc = new WebService();
jsonResult.Data = svc.GetUserList(User.Identity.Name);
return jsonResult;
}
これを単体テストしようとすると、 User.Identity.Name が null であるため、例外がスローされます。現在の単体テスト コードは次のようになります。
[TestClass]
public class ControllerAndRepositoryActionTests {
public TestContext testContext { get; set; }
private static Repository _repository;
private username = "domain\\foobar";
private static bool active = true;
[ClassInitialize]
public static void MyClassInitialize(TestContext testContext)
{
_repository = new WebServiceRepository();
}
#region Controller method tests
[TestMethod]
public void GetUserListReturnsData()
{
Controller controller = new Controller();
var result = controller.GetUserListFromWebService();
Assert.IsNotNull(result.Data);
}
#endregion
#region service repository calls - with timing
[TestMethod]
public void GetUserListTimed()
{
testContext.BeginTimer("Overall");
var results = _repository.GetUserList(username, active);
foreach (var result in results)
{
Console.WriteLine(result.UserID);
Console.WriteLine(result.UserName);
}
testContext.EndTimer("Overall");
}
#endregion
}
TestContext を使用して、最終的に GetUserListFromWebService 呼び出しで使用される User.Identity を設定できますか?
可能であれば、TestContext を割り当てるために受け入れられている方法は何ですか。MyClassInitialize でパラメーターとして取得した場合、メンバー変数を設定しますか、それとも何らかの方法でそれをパラメーターとして TestMethods に渡す必要がありますか?
私は完全に要点を逃していますか?他のモックフレームワークを使用する必要がありますか?