【问题标题】:New to TDD, Unit test for Null StringTDD 新手,空字符串的单元测试
【发布时间】:2014-02-17 15:51:42
【问题描述】:

我是 TDD 的新手,我对如何进行有点困惑。我正在创建一个登录功能(ASP.NET Webform),我喜欢创建一个单元测试来检查 loginId 和 PAssword 不为空。

为了完成我的任务,我是这样开始的:

    [Test] 
    public void MethodForTest_StringNotNull()
    {
        string expected="asdf";
        Login log=new Login();
        Assert.IsNotNull(expected,log.UserId);

    }

请让我知道这是否是正确的方法。

谢谢,

【问题讨论】:

  • 您要准确测试什么?您是否尝试在创建 Login 实例时测试 UserId 属性是否不为空?请更具体
  • 我有点困惑,为什么您希望新打开表单的 UserId 是“asdf”。
  • 我想在我的网站上测试登录功能。用户将从 UI 提供 loginId 和密码,但在后端我喜欢为它创建一个单元测试。为了创建一个单元测试,我将这些列为我的任务。 1- UserId 不能为 null 2-Password 不能为 null 3-UserId 提供的是从数据库中提取正确信息以对用户进行身份验证。
  • 您需要告诉我们更多关于Login 类的作用。您将如何与该类进行交互(例如,将调用哪些方法)?您对每种互动的期望是什么?
  • 登录类连接到数据库并验证用户。它将 loginId 和 password 作为输入。

标签: c# asp.net unit-testing tdd nunit


【解决方案1】:

您正在使用Assert.IsNotNull(object, string) 重载(请参阅documentation

因此,使用您显示的代码测试expected 是否不是null,,如果是,则将log.UserId 显示为错误消息。

要实际测试您的 Web 表单代码,您可以查看名为 Model View Presenter 的设计模式。通过使用这样的模式,您可以将用户界面与后面的代码分离。这允许您伪造用户界面,您可以在用户界面中为用户名和密码等值设置虚拟值。然后,您可以验证您的代码是否正确。

您的数据库也是如此。如果您的单元测试使用的是您实际创建的数据库 集成测试。这是一种不同类型的测试,应该以不同的方式处理。

不久前,我写了一篇关于其中一些概念的博客文章。希望对你有帮助:Unit Testing, hell or heaven?.

【讨论】:

    【解决方案2】:

    您可以使用不同级别的测试。

    单元测试

    您的示例代码是一个单元测试(只要Login 不调用数据库,否则会使其成为集成测试)。在这方面对Login 类进行单元测试不会有太大价值,因为它看起来并没有多大作用(不过,我们还没有看到Login 的代码,所以这是一个假设)。

    集成测试

    这种类型的测试意味着您正在与外部“事物”交互,例如数据库、文件系统、网络等。没有看到Login 的代码,我无法在这里说明集成测试是否对您有用。

    功能测试

    在这里,您可以使用Watin 之类的工具来驱动一个实际的浏览器,该浏览器将导航到您的网站并执行您要求它执行的任何命令。因此,您可以导航到登录页面,输入用户名和密码,单击“确定”,然后在测试中验证是否提供了预期的用户名和密码。

    听起来您需要在这里使用功能测试,因为您想确保给定的用户输入是您期望它在服务级别的内容。

    在上述所有测试类型中,您仍然可以使用 NUnit 来驱动测试,所以不用担心。使用 Watin,您只需下载它并将其包含在您的项目中,正如该工具的文档所述。

    还有其他可用的网络驱动程序类型工具,但 Watin 是我想到的那个。

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2023-03-05
      • 2011-03-14
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多