Unit testing 如何在单轨控制器单元测试中伪造验证错误?

Unit testing 如何在单轨控制器单元测试中伪造验证错误?,unit-testing,validation,castle-monorail,Unit Testing,Validation,Castle Monorail,我在Castle的主干上运行,并尝试在设置DTO验证的地方对控制器操作进行单元测试。控制器从SmartDispatcherController继承。动作和DTO看起来像: [AccessibleThrough(Verb.Post)] public void Register([DataBind(KeyReg, Validate = true)] UserRegisterDto dto) { CancelView(); if (HasValidationError(dto))

我在Castle的主干上运行,并尝试在设置DTO验证的地方对控制器操作进行单元测试。控制器从SmartDispatcherController继承。动作和DTO看起来像:


[AccessibleThrough(Verb.Post)]
public void Register([DataBind(KeyReg, Validate = true)] UserRegisterDto dto)
{
    CancelView();
    if (HasValidationError(dto))
    {
        Flash[KeyReg] = dto;
        Errors = GetErrorSummary(dto);
        RedirectToAction(KeyIndex);
    }
    else
    {
        var user = new User { Email = dto.Email };
        // TODO: Need to associate User with an Owning Account
        membership.AddUser(user, dto.Password);
        RedirectToAction(KeyIndex);
    }
}

public class UserRegisterDto
{
    [ValidateNonEmpty]
    [ValidateLength(1, 100)]
    [ValidateEmail]
    public string Email { get; set; }

    [ValidateSameAs("Email")]
    public string EmailConfirm { get; set; }

    [ValidateNonEmpty]
    public string Password { get; set; }

    [ValidateSameAs("Password")]
    public string PasswordConfirm { get; set; }

    // TODO: validate is not empty Guid
    [ValidateNonEmpty]
    public string OwningAccountIdString { get; set; }

    public Guid OwningAccountId
    {
        get { return new Guid(OwningAccountIdString); }
    }

    [ValidateLength(0, 40)]
    public string FirstName { get; set; }

    [ValidateLength(0, 60)]
    public string LastName { get; set; }
}
单元测试如下所示:


[Fact]
public void Register_ShouldPreventInValidRequest()
{
    PrepareController(home, ThorController.KeyPublic, ThorController.KeyHome, HomeController.KeyRegister);

    var dto = new UserRegisterDto { Email = "ff" };
    home.Register(dto);

    Assert.True(Response.WasRedirected);
    Assert.Contains("/public/home/index", Response.RedirectedTo);
    Assert.NotNull(home.Errors);
}
(“home”是测试中我的HomeController实例;home.Errors包含对ErrorSummary的引用,当出现验证错误时,应该将该引用放入闪存中)

我看到调试器认为dto没有验证错误;它显然应该有几个失败,测试运行的方式

我已经读过了,但从这本书写完后,城堡的树干似乎已经移动了。有人能解释一下吗?

似乎包含一个答案