Asp.net mvc 如何在ASP.NET中使用Moq测试HTTP Post?
我有下面的Asp.net mvc 如何在ASP.NET中使用Moq测试HTTP Post?,asp.net-mvc,unit-testing,moq,Asp.net Mvc,Unit Testing,Moq,我有下面的动作方法我正在尝试moq测试。注意AcceptVerbs?我需要确保我正在测试 这里是方法 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create([Bind(Include = "Subject, Content")]Post post, HttpPostedFileBase imageFileName) { ... } 这是我的最低起订量代码 [TestMethod] public void Create_Ac
动作方法
我正在尝试moq测试。注意AcceptVerbs
?我需要确保我正在测试
这里是方法
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Include = "Subject, Content")]Post post,
HttpPostedFileBase imageFileName)
{
...
}
这是我的最低起订量代码
[TestMethod]
public void Create_Action_snip_sniop_When_Http_Post_Is_Succesful()
{
// Arrange.
var mock = new Mock<ControllerContext>();
mock.SetupGet(m => m.HttpContext.Request.HttpMethod).Returns("POST");
// Snip some other arrangements.
var controller = PostController;
controller.ControllerContext = mock.Object;
// Act.
var viewResult = controller.Create(post, image.Object) as ViewResult;
// Assert.
Assert.IsNotNull(viewResult);
// TODO: Test that the request was an Http-Post.
[TestMethod]
当Http\u Post\u成功时,public void Create\u Action\u snip\u sniop\u
{
//安排。
var mock=new mock();
SetupGet(m=>m.HttpContext.Request.HttpMethod).Returns(“POST”);
//剪掉一些其他的安排。
var控制器=后控制器;
controller.ControllerContext=mock.Object;
//表演。
var viewResult=controller.Create(post,image.Object)作为viewResult;
//断言。
Assert.IsNotNull(viewResult);
//TODO:测试请求是否为Http Post。
我需要做什么来验证请求是否是post?作为单元测试运行时不会调用您的属性,因为它通常由ControllerActionInvoker作为Mvc“堆栈”的一部分调用。在这种情况下,我所做的是编写一个测试,以确保使用正确的参数将正确的属性应用于操作。然后我相信框架将正确完成其工作 这样做需要反思:
public void Only_posts_are_allowed_to_my_action()
{
var method = typeof(MyController).GetMethod("MyAction");
var attribute = method.GetCustomAttributes(typeof(AcceptVerbsAttribute),false)
.Cast<AcceptVerbsAttribute>()
.SingleOrDefault();
Assert.IsNotNull( attribute );
Assert.AreEqual( 1, attributes.Count() );
Assert.IsTrue( attributes.Contains( HttpVerbs.Post ) );
}
public void Only_posts_允许_执行我的行动()
{
var method=typeof(MyController).GetMethod(“MyAction”);
var attribute=method.GetCustomAttributes(typeof(AcceptVerbsAttribute),false)
.Cast()
.SingleOrDefault();
Assert.IsNotNull(属性);
aresequal(1,attributes.Count());
IsTrue(attributes.Contains(HttpVerbs.Post));
}
因此,您要说的是,您正在进行测试,以确保您已使用.Post动词修饰了特定的控制器方法。与测试该方法是否在请求时触发不同的是Http Post(因为这超出了此范围->它是框架内容)..?正确。调用筛选器的功能不在方法的范围内(在调用方法之前首先激发),因此如果应用了正确的属性,您将永远不会在方法中看到非POST。