单元测试 - 用户帐户

时间:2009-06-24 11:54:07

标签: asp.net visual-studio visual-studio-2008 unit-testing active-directory

Visual Studio 2008中的ASP.Net应用程序

我正在创建单元测试来测试(in)Web应用程序的有效登录。我有一个Authenticate(User,Pass)bool方法。空案例和无效密码测试正常运行。

我的问题是如何测试有效的登录信息。我有对Web应用程序有效的帐户,但我觉得用户名和密码硬编码可能不是最好的解决方案。

我想我可能不得不:   创建一个测试用户   授予用户访问Web应用程序的权限   运行我的测试   删除testuser

有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

首先,如果您正在与真实的Web应用程序或真实数据库进行对话,那么您就不进行单元测试,而是进行集成测试。

你在这里试图测试到底是什么?

这:

  • 传入错误的用户名和/或密码不会登录用户?
  • 传入正确的用户名和/或密码会登录用户吗?
  • 某个帐户确实在Active Directory中?会证明什么?您的IT管理员是否完成了自己的工作?

请记住,你不应该断言事实,你应该断言行为。因此,不要尝试验证特定帐户是否在AD中,请确认在给定正确的用户名和密码时,您的代码按预期运行,并且当给出错误的用户名或密码时,它也会按预期运行,您应该尝试不涉及Active Directory就这样做。

在上面的前两种情况中,涉及多个代码:

  • 接受用户名和密码的代码
  • 尝试使用该用户名和密码查找现有帐户的代码
  • 存储“现已登录”事实的代码
  • 响应“错误的用户名或密码”错误的代码

那么,您是否正在测试您的数据库是否有效?或者您检查有效性的代码是否有效?

我会伪造检索现有帐户的代码,并让它在一个单元测试中响应“这里是帐户数据”,在另一个单元测试中“没有匹配的帐户”,以验证您的登录代码以正确的方式响应,通过登录用户或响应错误,然后断言。

请注意,在某些时候您还需要进行实际的集成测试,因为您希望确保查询Active Directory的代码正常工作,但是您应该尽可能多地测试行为而不涉及Active Directory,它将使您的测试更具可读性(一切都在一个地方),更易于维护(无需登录到Active Directory以生成新的测试数据),并且更值得信赖(如果有人搞砸了Active Directory,网络是片状,用户已删除,软件升级,因此响应不同等。)。

我已经看到太多“单元测试”由于外部依赖性而失败,我的建议是尽可能地尽可能地减少那些,理想情况下根本没有。对于你的单元测试

答案 1 :(得分:0)

您是否不能使用模拟数据源而不是实际用户名和密码的实际用户名和密码?

这是我推荐的方法,因为您要测试的是身份验证过程,而不是数据。