我是TDD的新手,我很少混淆如何继续。我正在创建一个登录功能(ASP.NET Webform),我想创建一个单元测试来检查loginId并且PAssword不为null。
为了完成我的任务,我开始这样:
[Test]
public void MethodForTest_StringNotNull()
{
string expected="asdf";
Login log=new Login();
Assert.IsNotNull(expected,log.UserId);
}
如果这是正确的方法,请告诉我。
谢谢,
答案 0 :(得分:1)
您正在使用Assert.IsNotNull(object, string)
重载(请参阅documentation)
因此,如果expected
null,
不是log.UserId
,则显示您正在测试的代码,请将{{1}}显示为错误消息。
要实际测试您的网络表单代码,您可以查看名为Model View Presenter的设计模式。通过使用这样的模式,您可以将用户界面与代码分离。这允许您伪造一个用户界面,您可以在其中设置用户界面中的虚拟值,以获取用户名和密码等值。然后,您可以验证您的代码是否正确。
您的数据库也是如此。如果您的单元测试使用的是您实际创建的数据库 集成测试。这是一种应该以不同方式处理的不同类型的测试。
我刚刚写了一篇关于其中一些概念的博客文章。我希望它可以帮到你:Unit Testing, hell or heaven?。
答案 1 :(得分:0)
您可以使用不同级别的测试。
单元测试
您的示例代码是一个单元测试(只要Login
不调用数据库,否则会使这成为集成测试)。在这方面对Login
类的单元测试没有多大价值,因为它看起来并不多(尽管我们还没有看到Login
的代码,所以这是一个假设)。
整合测试
此类测试意味着您正在与外部“事物”进行交互,例如数据库,文件系统,网络等。如果没有看到Login
的代码,我就不可能在这里说明集成测试对你有用。
功能测试
在这里,您可以使用Watin之类的工具来驱动实际的浏览器,该浏览器将导航到您的网站并执行您要求它执行的任何命令。因此,您可以导航到登录页面,输入用户名和密码,单击“确定”,然后在测试中验证是否给出了预期的用户名和密码。
听起来你需要在这里使用功能测试,因为你想确保给定的用户输入是你在服务级别所期望的。
在上述所有测试类型中,您仍然可以使用NUnit来驱动测试,因此不必担心。使用Watin,您只需将其下载并将其包含在项目中,就像工具的文档所述。
还有其他网络驱动程序类型工具可供使用,但Watin
是我的最爱。