0
我想单元测试基础对象的验证。我期待3个属性(电子邮件,电话和技能> 0)未通过验证,但测试失败。ValidationContext的单元测试失败?
基类
public abstract class Person : Entity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string FullName { get { return string.Format("{0} {1}", FirstName, LastName); } }
public string Email { get; set; }
public string Phone { get; set; }
public DateTime DateAdded { get; set; }
public bool Active { get; set; }
}
派生类
public class Contractor : Person, IValidatableObject
{
public Address Address { get; set; }
public List<Skill> SkillSet { get; set; }
public DateTime? NextAvailableDate { get; set; }
public Contractor()
{
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrWhiteSpace(base.FirstName))
yield return new ValidationResult("The First Name field cannot be empty.");
if (string.IsNullOrWhiteSpace(base.LastName))
yield return new ValidationResult("The Last Name field cannot be empty.");
if (string.IsNullOrWhiteSpace(base.Email))
yield return new ValidationResult("The Email field cannot be empty.");
if (string.IsNullOrWhiteSpace(base.Phone))
yield return new ValidationResult("The Phone field cannot be empty.");
if (SkillSet.Count() < 1)
yield return new ValidationResult("A contractor must have at least one skill.");
}
TEST
[TestMethod]
public void contractor_is_missing_email_phone_skill_when_created()
{
//Arrange
Contractor contractor = new Contractor { FirstName = "abc", LastName = "def" };
//Act
ValidationContext context = new ValidationContext(contractor);
IEnumerable<ValidationResult> result = contractor.Validate(new ValidationContext(contractor));
List<ValidationResult> r = new List<ValidationResult>(result);
//Assert
Assert.IsTrue(r.Count == 3);
}
谢谢 - 它现在所有的工作!不相信我错过了! – Greg 2013-02-24 18:41:56
没问题,我一直这样做;-) – stephenl 2013-02-24 23:09:54
您可能还想考虑使用构造函数来执行不变量,而不是依赖验证库。如果你用'public Constructor(string firstName,string lastName,string phone,string email,Skill skill)替换了默认的构造函数''你正在简化你的类,并使构造更加明确。 – stephenl 2013-02-25 01:00:50