我正在使用DataAnnotations进行模型验证,即
[Required(ErrorMessage="Please enter a name")]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我正在检查ModelState的值.对于从我的视图发布的无效模型数据,这正确返回false.
但是,在执行我的控制器操作的单元测试时,ModelState始终返回true:
[TestMethod]
public void Submitting_Empty_Shipping_Details_Displays_Default_View_With_Error()
{
// Arrange
CartController controller = new CartController(null, null);
Cart cart = new Cart();
cart.AddItem(new Product(), 1);
// Act
var result = controller.CheckOut(cart, new ShippingDetails() { Name = "" });
// Assert
Assert.IsTrue(string.IsNullOrEmpty(result.ViewName));
Assert.IsFalse(result.ViewData.ModelState.IsValid);
}
Run Code Online (Sandbox Code Playgroud)
在测试中我是否需要做额外的事情来设置模型验证?
谢谢,
本
鉴于以下对象,
public class Question
{
[Required]
public string QuestionText { get; set; }
[Range(1, 5)]
public int Difficulty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用以下验证码
ICollection<ValidationResult> results = new List<ValidationResult>();
Question question = new Question();
ValidationContext ctx = new ValidationContext(question, null, null);
Validator.TryValidateObject(question, ctx, results);
// results.Length = 1
Run Code Online (Sandbox Code Playgroud)
为什么Range属性在Required(值显然为0)时不会创建验证错误?
验证父对象时是否可以自动验证复杂的子对象,并将结果包含在已填充的对象中ICollection<ValidationResult>
?
如果我运行以下代码:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace ConsoleApplication1
{
public class Person
{
[Required]
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
[Required]
public string Street { get; set; }
[Required]
public string City { get; set; }
[Required]
public string State { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person person = new Person
{
Name = null,
Address …
Run Code Online (Sandbox Code Playgroud)