【问题标题】:How to test duplicate email addresses in .NET MVC如何在 .NET MVC 中测试重复的电子邮件地址
【发布时间】:2009-10-22 04:33:50
【问题描述】:

我在 Accounts Controller -> Registration ActionValidateRegistation 函数中添加了功能来测试用户注册表单中的空白。如果用户输入的电子邮件地址已经在系统中,我现在想向表单抛出错误。我在 ValidateRegistration 函数末尾添加了检查重复电子邮件地址的函数。

我使用 linq 查询数据库以创建用户列表并检查电子邮件是否已被使用,这在运行时运行良好。我创建了一个 Visual Basic 测试,在注册操作期间测试重复电子邮件地址的用户对象(用户名、密码等)。如何避免 ValidateRegistration 查询数据库并创建用户列表(这是我在运行时想要的),而是在单元测试期间向 ValidateRegistration 提供假用户对象?

示例代码:帐户控制器

    public ActionResult Register(string username... string password...)
    {

            //Call the ValidateRegistration(string username... string password...);

            //Add user if ValidateRegistration checks have passed
    }

public ValidateRegistration(字符串用户名...字符串密码...) { //如果为空则检查用户名 // ModelState.AddModelError(用户名为空)

//检查密码长度 // ModelState.AddModelError(密码太短消息)

//列出 lstUsers = GetUsers(); //检查邮箱地址是否已经被使用 // ModelState.AddModelError(邮箱已经使用)

//如何对上面的邮箱地址检查进行单元测试?

}

示例代码:单元测试

    public void RegisterPostReturnsViewIfFirstnameNotSpecified()
    {
        // Arrange
        AccountController controller = GetAccountController();

        // Act
        ViewResult result = (ViewResult)controller.Register(string username... string password...)

        // Assert
        Assert.AreEqual(6, result.ViewData["PasswordLength"]);
        Assert.AreEqual(See if error message is equal);
    }

【问题讨论】:

    标签: asp.net-mvc unit-testing


    【解决方案1】:

    您应该研究“依赖注入”或“控制反转”。有许多流行的 IoC 容器允许您在请求新对象时配置在运行时创建的类型(在您的情况下为数据库访问层 [DAL])。

    使用 DI 的基本前提是您告诉控制器“使用此 DAL”,而不是控制器决定使用哪个 DAL。使用 IoC,您的单元测试会配置当有人向其请求 DAL 时创建哪些类,而您的控制器向容器请求 DAL。

    一个很好的起点是Martin Fowler's article.

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 2016-03-05
      • 2014-11-29
      • 2011-12-11
      • 1970-01-01
      • 2021-08-29
      • 2021-06-30
      • 2010-11-04
      相关资源
      最近更新 更多