我一直在尝试找到有关此问题的简单信息,但是我却一直无法做到这一点-我发现的内容一直模糊不清,让我无法理解正在发生的事情,或者对于错误的事情太具体了(例如)我为单元测试AuthorizeAttribute找到的教程。 (第三种选择当然是我太愚蠢了,以至于没有意识到我正在阅读要查找的信息...在这种情况下,我仍然需要帮助,因为我愚蠢:P)
我希望能够测试两件事:
而且我一无所知。有人可以将我实际需要测试的内容推向正确的方向吗?我的测试的“安排”,“行动”和“断言”部分应包含哪些内容?
如果我不够清楚,请提供一些细节:
我有一个
CustomValidationFilter
,该代码应检查两个提交的表单值是否相同,如果不相同,则添加一个ModelStateError
。如果值不相同,我想验证是否在错误中添加了正确的错误消息,并且如果值相等(且非空),则不添加错误。我对
Write
也有一个GuestbookController
操作。我想验证是否已将过滤器应用于此操作。 最佳答案
在测试中使用反射。
var method = typeof(MyController).GetMethod("MyMethod");
var attribute = method.GetCustomAttributes(typeof(CustomValidationFilter),false);
.Cast<CustomValidationFilter>()
.SingleOrDefault();
Assert.IsNotNull( attribute );
Assert.AreEqual( "value", atttribute.SomeProperty );
在您的类中为该方法创建一个单元测试。用适当的数据模拟filterContext,并检查该方法应设置的变量是否实际上与您期望的一样。
public void AttributeTest()
{
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
var controller = new FakeController();
controller.controllerContext = new ControllerContext( httpContext, new RouteData(), controller );
...
attribute.OnActionExecuting( filterContext );
Assert...
}
关于asp.net-mvc - 如何对自定义ActionFilter进行UnitTest?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/935276/