作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对 Controller 操作 HttpAcceptAttribute 动词进行单元测试的最佳方法是什么?
到目前为止,我有以下内容,但它太丑了,连妈妈都不喜欢,而且不太灵活。有没有更好的办法?
[Fact] // using xUnit, mocking controller in class
public void FilterControllerTestRemoveFilterByProductAttributeIsOfTypePost()
{
Type[] paramTypes = new[] { typeof(int) };
var method = typeof(FilterController).GetMethod("MyMethod", paramTypes);
var attributes = method.GetCustomAttributes(typeof(AcceptVerbsAttribute), false).Cast<AcceptVerbsAttribute>().SingleOrDefault();
Assert.NotNull(attributes);
Assert.Equal(1, attributes.Verbs.Count());
Assert.True(attributes.Verbs.First().Equals(HttpVerbs.Post.ToString(), StringComparison.InvariantCultureIgnoreCase));
}
谢谢麦克
最佳答案
没有反射和魔法字符串,在不破坏单元测试的情况下很容易重命名 Controller 和方法:
[TestMethod]
public void HomeController_Index_Action_Should_Accept_Post_Verb_Only()
{
Expression<Action<HomeController>> expression = (HomeController c) => c.Index(null);
var methodCall = expression.Body as MethodCallExpression;
var acceptVerbs = (AcceptVerbsAttribute[])methodCall.Method.GetCustomAttributes(typeof(AcceptVerbsAttribute), false);
acceptVerbs.ShouldNotBeNull("");
acceptVerbs.Length.ShouldBe(1);
acceptVerbs[0].Verbs.First().ShouldBe("POST");
}
关于c# - 测试 MVC Controller 操作 HttpAcceptAttribute 动词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583757/
对 Controller 操作 HttpAcceptAttribute 动词进行单元测试的最佳方法是什么? 到目前为止,我有以下内容,但它太丑了,连妈妈都不喜欢,而且不太灵活。有没有更好的办法? [F
我是一名优秀的程序员,十分优秀!