用户信息如何从UnitTest传递给控制器​​?

时间:2014-03-26 14:17:20

标签: c# asp.net-mvc unit-testing

[TestMethod]
public void UnitTestMethod1()
{
   Test1Controller controller = new Test1Controller();

   //This call throws NullReferenceException "Object reference not set to an instance of    an object." 
   WebSecurity.Login("User1", "password1");

   controller.TestMethod(); 
} 

在上面的代码中如何使WebSecurity.Login调用工作?

我做了研究,但没有帮助much

感谢。

1 个答案:

答案 0 :(得分:0)

您不希望测试WebSecurity,只测试您自己的代码 - 因此您需要一种方法来测试控制器操作,而无需提供真正的 WebSecurity类。

有很多方法可以做到这一点,但从你的问题的性质来看,我认为你想要最简单的方法(而不是最优雅的)在这种情况下,我建议你不要实际上是测试控制器动作及其所有相关的MVC管道,但是要拔出你的逻辑并测试一下,例如:

public Test1Controller
{
      public ActionResult SomeMethod()
      {
            //do mvc stuff

            //do WebSecurity stuff  

            //do your stuff
            MyLogicHere();
      }

    //public only so it can be tested
    public MyLogicHere()
    {
        //the logic in here does not have dependencies on difficult to test types 
    }
}

然后在您的测试类中,您只是测试Test1Controller.MyLogicHere(不需要WebSecuirity)。

无论是那个还是真正掌握了DI,Interfaces,Mocks等......