【问题标题】:Unit Test - User Account单元测试 - 用户帐户
【发布时间】:2009-06-24 11:54:06
【问题描述】:

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

我正在创建单元测试来测试 Web 应用的(有效)登录。我有一个 Authenticate(User,Pass) bool 方法。空大小写和无效密码测试正常工作。

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

我想我可能必须: 创建测试用户 授予用户对 Web 应用程序的访问权限 运行我的测试 删除测试用户

有更好的方法吗?

【问题讨论】:

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


    【解决方案1】:

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

    您要在这里测试的究竟是什么?

    那个:

    • 输入错误的用户名和/或密码将无法登录用户?
    • 输入正确的用户名和/或密码会登录用户吗?
    • 帐户确实在 Active Directory 中?那能证明什么呢?您的 IT 管理员是否完成了他/她的工作?

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

    在上面的前两种情况下,涉及到多段代码:

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

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

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

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

    我见过太多“单元测试”由于外部依赖而失败,我的建议是尽量减少这些,最好完全没有。对于您的单元测试

    【讨论】:

    • 此特定方法没有数据库。这个方法被一个接受用户名和密码的 web 表单调用。该方法通过检查 AD 中的组来针对 Active Directory 验证这一点,并确保用户在特定组中,但不在其他组中。我在想我需要动态创建用户,将它们添加到应该通过(和失败)的组序列中,然后运行测试。
    • 正如我所说,您不应该为此使用实时 Active Directory 安装。取而代之的是,伪造数据提供者,告诉你人们在哪些群体中,并断言你的程序行为正确。如果您正在与 Active Directory 服务器通信,那么您是在进行集成测试,而不是单元测试。
    • 好吧.. 伪造数据提供者的最佳方法是什么?
    • 创建一个新类,该类实现与您试图伪造的接口相同的接口,或使用隔离框架(TypeMock、Moq、NMock 等)生成它并返回那里的方法中的已知数据。
    • 你应该看看隔离框架能给你带来什么,TypeMock 的 Roy Osherove 在网上有很多非常好的资料。
    【解决方案2】:

    您不能使用模拟数据源而不是从其中检索实际用户名和密码的实际数据源吗?

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

    【讨论】:

    • 问题是帐户在 Active Directory 中。我没有在问题 D'oh 中提到这一点
    • 也许做一个本地测试LDAP服务器?
    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2015-08-02
    • 2013-02-24
    相关资源
    最近更新 更多