Rob*_*Rob 2 asp.net unit-testing active-directory visual-studio-2008 visual-studio
Visual Studio 2008中的ASP.Net应用程序
我正在创建单元测试来测试(在)Web应用程序的有效登录.我有一个Authenticate(User,Pass)bool方法.null case和无效密码测试正常工作.
我的问题是如何测试有效的登录.我有对Web应用程序有效的帐户,但我觉得用户名和密码硬编码可能不是最好的解决方案.
我想我可能要:创建一个测试用户授予用户访问web应用程序运行我的测试删除testuser
有更好的方法吗?
首先,如果您正在与真实的Web应用程序或真实的数据库进行对话,那么您不进行单元测试,而是进行集成测试.
你究竟想在这里测试到底是什么?
那:
请记住,你不应该断言事实,你应该断言行为.因此,不要尝试验证特定帐户是否在AD中,请确认在给定正确的用户名和密码时,您的代码按预期运行,并且当给出错误的用户名或密码时,它也会按预期运行,您应该尝试不涉及Active Directory就这样做.
在上面的前两种情况中,涉及多个代码:
那么,您是否正在测试您的数据库是否有效?或者您检查有效性的代码有效吗?
我会伪造检索现有帐户的代码,并使其在一个单元测试中响应"这里是帐户数据",并在另一个单元测试中"响应没有匹配的帐户",以验证您的登录代码以正确的方式响应登录用户,或者回复错误,然后断言.
请注意,在某些时候您还需要进行实际的集成测试,因为您要确保查询Active Directory的代码正常工作,但是您应该在不涉及Active Directory的情况下测试尽可能多的行为,它将使您的测试成为可能.更具可读性(一切都在一个地方),更易于维护(无需登录Active Directory以生成新的测试数据),并且更值得信赖(如果有人搞砸了Active Directory,网络是片状的,用户不会想知道它何时失败已被删除,软件升级,因此响应不同等).
我已经看到太多的"单元测试"由于外部依赖性而失败,我的建议是尽可能地尽量减少这些,最好不要.对于您的单元测试.