2017-01-28 4 views
0

メソッド内でセッションを作成するメソッドをテストする方法。私はユニットテストをするために使用します。テストケースを使用してメソッドを呼び出すと、メソッド内でセッションを作成できませんでした。誰もが、私は、コードを次が、それはあなたがヘルパーにセッション変数の設定を入れることができますセッションを作成するMoqを使用してメソッドをユニットテストする方法

[TestMethod] 
     public void InviteUser_ExpectRedirectActionResultReturned() 
     { 
      //Arrange 
      controller = new AccountController(); 

      var mockControllerContext = new Mock<ControllerContext>(); 
      var mockSession = new Mock<HttpSessionStateBase>(); 
      mockSession.SetupGet(s => s["verification_uid"]).Returns("123"); //somevalue 
      mockControllerContext.Setup(p => p.HttpContext.Session).Returns(mockSession.Object); 
      controller.ControllerContext = mockControllerContext.Object; 

      var id = "1"; 
      System.Web.HttpContext.Current.Session["verification_uid‌​ID"] = "12"; 

      //Act 
      var result = (RedirectToRouteResult)controller.InviteUser(id); 

      //Assert 
      result.RouteValues["action"].Equals("Index"); 
      result.RouteValues["controller"].Equals("Home"); 

      Assert.AreEqual("Index", result.RouteValues["action"]); 
      Assert.AreEqual("Home", result.RouteValues["controller"]); 
     } 

答えて

1

を働いていないと試してみました

public ActionResult InviteUser(string Id) 
    { 
     if (!string.IsNullOrEmpty(Id)) 
     { 
     Session["verification_uid"] = Id; 
     return RedirectToAction("Login", "Account"); 
     } 
     return View(); 
    } 

以下の私のコードのためのユニットテストを作成するために私を助けてくださいすることができますクラスに渡されたインターフェイスを実装して、単体テストで模擬することができます。

public MyClass 
{ 
    private readonly ISessionHelper _helper; 

    public MyClass(ISessionHelper helper) 
    { 
     this._helper = helper; 
    } 

    public ActionResult InviteUser(string Id) 
    { 
     if (!string.IsNullOrEmpty(Id)) 
     { 
     this._helper.SetSessionVariable("verification_uid", Id); 
     return RedirectToAction("Login", "Account"); 
     } 
     return View(); 
    } 
} 

あなたのヘルパーには、設定を行うSetSessionVariableが含まれています。

あなたのユニットテストでは、ISessionHelperをモックします。

+0

私たちはアプリケーションでサービスを使用していないため、サービスベースのアーキテクチャを使用せずに行うことができます。これは簡単なWebベースのアプリケーションです。 –

+0

@CharanTejaKutaなぜこれがサービスと関係していると思いますか分かりません。これは単にヘルパーをクラスのコンストラクタに渡しているので、嘲笑されることがあります。 – Freakshow

関連する問題