私は、その中にクッキーを作成して残りの操作を行うMVCコントローラを持っています。私はこのメソッドを単体テストする必要があります。私はどのようにクッキーをモックするか分からない。単体テストのモッククッキーの仕組み
これはコントローラの私の方法であって、このラインResponse.Cookies.Add(usercookie)で
public ActionResult Login(LogInRequest logInRequest)
{
if (ModelState.IsValid)
{
HttpCookie usercookie = new HttpCookie("usercookie");
usercookie["UserName"] = logInRequest.UserName;
usercookie["Password"] = logInRequest.Password;
usercookie.Expires = DateTime.Now.AddMinutes(10);
**Response.Cookies.Add(usercookie);**
return RedirectToAction("search", "LoanDriver");
.......
return View(logInRequest);
}
。それは私にNullのようなエラーを与えました。私がクッキーを追跡すると、価値があります。
そして、これは私の試験方法である:私はあなたがこれを扱うことができると思い
public static void SetFakeContext(this Controller controller)
{
var httpContext = InitialiseFakeHttpContext();
ControllerContext context =
new ControllerContext(new RequestContext(httpContext, new RouteData()), controller);
controller.ControllerContext = context;
}
private static HttpContextBase InitialiseFakeHttpContext(string url = "")
{
var HttpContextSub = Substitute.For<HttpContextBase>();
var RequestSub = Substitute.For<HttpRequestBase>();
var ResponseSub = Substitute.For<HttpResponseBase>();
var serverUtilitySub = Substitute.For<HttpServerUtilityBase>();
var itemsSub = Substitute.For<IDictionary>();
HttpContextSub.Request.Returns(RequestSub);
HttpContextSub.Response.Returns(ResponseSub);
HttpContextSub.Server.Returns(serverUtilitySub);
var cookie = Substitute.For<HttpResponseBase>();
HttpContextSub.Response.Returns(cookie);
return HttpContextSub;
}
をそれは素晴らしい答えでした。ありがとう。 – Alma