问题描述
我有一个自定义的 asp.net mvc 类验证属性.我的问题是如何对其进行单元测试?测试类是否具有属性是一回事,但这实际上不会测试其中的逻辑.这就是我要测试的内容.
I have a custom asp.net mvc class validation attribute.My question is how can I unit test it?It would be one thing to test that the class has the attribute but this would not actually test that the logic inside it. This is what I want to test.
[Serializable]
[EligabilityStudentDebtsAttribute(ErrorMessage = "You must answer yes or no to all questions")]
public class Eligability
{
[BooleanRequiredToBeTrue(ErrorMessage = "You must agree to the statements listed")]
public bool StatementAgree { get; set; }
[Required(ErrorMessage = "Please choose an option")]
public bool? Income { get; set; }
..... 为简洁起见已删除}
.....removed for brevity }
[AttributeUsage(AttributeTargets.Class)]
public class EligabilityStudentDebtsAttribute : ValidationAttribute
{
// If AnyDebts is true then
// StudentDebts must be true or false
public override bool IsValid(object value)
{
Eligability elig = (Eligability)value;
bool ok = true;
if (elig.AnyDebts == true)
{
if (elig.StudentDebts == null)
{
ok = false;
}
}
return ok;
}
}
我尝试按如下方式编写测试,但这不起作用:
I have tried to write a test as follows but this does not work:
[TestMethod]
public void Eligability_model_StudentDebts_is_required_if_AnyDebts_is_true()
{
// Arrange
var eligability = new Eligability();
var controller = new ApplicationController();
// Act
controller.ModelState.Clear();
controller.ValidateModel(eligability);
var actionResult = controller.Section2(eligability,null,string.Empty);
// Assert
Assert.IsInstanceOfType(actionResult, typeof(ViewResult));
Assert.AreEqual(string.Empty, ((ViewResult)actionResult).ViewName);
Assert.AreEqual(eligability, ((ViewResult)actionResult).ViewData.Model);
Assert.IsFalse(((ViewResult)actionResult).ViewData.ModelState.IsValid);
}
ModelStateDictionary
不包含此自定义属性的键.它只包含标准验证属性的属性.
The ModelStateDictionary
does not contain the key for this custom attribute.It only contains the attributes for the standard validation attributes.
这是为什么?
测试这些自定义属性的最佳方法是什么?
What is the best way to test these custom attributes?
推荐答案
你的属性 EligabilityStudentDebtsAttribute
只是一个标准类,和其他所有东西一样,只需对 IsValid()
方法.如果它工作正常,相信框架该属性工作正常.
Your attribute EligabilityStudentDebtsAttribute
is just a standard class, like everything else, just unit test the IsValid()
method. If it works OK, trust to Framework that attribute works OK.
所以:
[Test]
public void AttibuteTest()
{
// arrange
var value = //.. value to test - new Eligability() ;
var attrib = new EligabilityStudentDebtsAttribute();
// act
var result = attrib.IsValid(value);
// assert
Assert.That(result, Is.True)
}
这篇关于如何对我的自定义验证属性进行单元测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!