作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我开始了解模拟和现在存在的不同框架时,我刚刚学习为我的 ASP.NET MVC 进行单元测试。
检查后,我发现最小起订量似乎是最容易接受的。截至目前,我一直在尝试模拟 Request.ServerVariables,如 after reading this post ,我了解到最好将它们抽象为属性。
因此:
/// <summary>
/// Return the server port
/// </summary>
protected string ServerPort
{
get
{
return Request.ServerVariables.Get("SERVER_PORT");
}
}
但是我很难学习如何正确地 mock 这个。我有一个家庭 Controller ActionResult 函数,它获取用户服务器信息并继续创建一个表单来获取用户信息。
我尝试使用hanselman's mvcmockhelpers class但我不知道如何使用它。
这就是我到目前为止所拥有的......
[Test]
public void Create_Redirects_To_ProductAdded_On_Success()
{
FakeViewEngine engine = new FakeViewEngine();
HomeController controller = new HomeController();
controller.ViewEngine = engine;
MvcMockHelpers.SetFakeControllerContext(controller);
controller.Create();
var results = controller.Create();
var typedResults = results as RedirectToRouteResult;
Assert.AreEqual("", typedResults.RouteValues["action"], "Wrong action");
Assert.AreEqual("", typedResults.RouteValues["controller"], "Wrong controller");
}
最佳答案
所以基本上我已经输入了所有引用文献并使用这个函数我能够让它工作。我还没有使用 mvcmockhelpers 类,因为我仍在尝试学习所有这些。
对于任何有兴趣了解我如何解决这个问题的人,这是我使用的代码。
[Test]
public void Create_Returns_ViewResult_On_Success()
{
var server = new Mock<HttpServerUtilityBase>(MockBehavior.Loose);
var response = new Mock<HttpResponseBase>(MockBehavior.Strict);
var request = new Mock<HttpRequestBase>(MockBehavior.Strict);
request.Setup(x => x.ApplicationPath).Returns("/");
request.Setup(x => x.Url).Returns(new Uri("http://localhost"));
request.Setup(x => x.ServerVariables).Returns(new System.Collections.Specialized.NameValueCollection{
{ "SERVER_NAME", "localhost" },
{ "SCRIPT_NAME", "localhost" },
{ "SERVER_PORT", "80" },
{ "HTTPS", "www.melaos.com" },
{ "REMOTE_ADDR", "127.0.0.1" },
{ "REMOTE_HOST", "127.0.0.1" }
});
var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);
context.SetupGet(x => x.Response).Returns(response.Object);
context.SetupGet(x => x.Server).Returns(server.Object);
var controller = new HomeController();
//MvcMockHelpers.SetFakeControllerContext(controller);
controller.ControllerContext = new ControllerContext(context. Object, new RouteData(), controller);
var results = controller.Create();
Assert.IsNotNull(results);
Assert.IsInstanceOf(typeof(ViewResult), results);
}
关于asp.net-mvc - 如何使用 ASP.NET MVC 的最小起订量模拟 Request.ServerVariables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770265/
我是一名优秀的程序员,十分优秀!