gpt4 book ai didi

unit-testing - 如何在 MonoRail Controller 单元测试中伪造验证错误?

转载 作者:行者123 更新时间:2023-12-04 04:54:53 25 4
gpt4 key购买 nike

我在 CaSTLe 的主干上运行,并尝试对设置了 DTO 验证的 Controller 操作进行单元测试。 Controller 继承自 SmartDispatcherController。 Action 和 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 的引用,当出现验证错误时应该将其放入 Flash)。

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

我已阅读 Joey's blog post on this ,但自从写完这篇文章后,CaSTLe 的树干似乎就在移动了。有人可以阐明一下吗?

最佳答案

关于unit-testing - 如何在 MonoRail Controller 单元测试中伪造验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/243580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com