0

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 に渡す必要がありますか?

私は完全に要点を逃していますか?他のモックフレームワークを使用する必要がありますか?

4

1 に答える 1