[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
感谢。
答案 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等......