【问题标题】:testing custom ASP.NET membership provider测试自定义 ASP.NET 成员资格提供程序
【发布时间】:2012-05-18 11:03:03
【问题描述】:

我正在使用带有底层 nhibernate 数据访问代码的自定义 asp.net 会员提供程序,这很好。现在我需要使用测试来练习这些方法。

有人有兴趣建议如何测试这些方法吗?提供一些链接来解释使用一些标准的测试方法吗?

这是我的第一个问题,所以要温柔:)

【问题讨论】:

标签: nhibernate membership-provider


【解决方案1】:

当涉及到对与数据库或第三方库执行某些操作的任何代码进行单元测试时,您应该解耦这些依赖关系,以便您的测试只测试您的代码。

例如,如果我们的成员资格提供程序中有一个用于添加单个用户的方法,我们想要测试的是我们的该单个方法的代码是否正常工作,而不是数据库已启动并运行或调用的方法通过这种方法工作。即使数据库离线或其他类的方法调用失败,我们的单元测试也应该仍然通过。

这就是 Mocking 发挥作用的地方。您需要模拟您的数据上下文并设置您将在其上使用的任何方法,以便您可以控制其响应。

仔细查看您的会员提供商提供的方法。每个人应该怎么做?这是您真正想要测试的唯一内容。这种方法,作为一个独立的单元,是否能完成我期望的工作。

【讨论】:

  • 我想在没有模拟的情况下在成员资格提供程序中测试我的方法,例如,使用 CreateUser 方法将新用户添加到 db Table,回滚事务以使 db 保持测试前的状态。我应该遵循这种方法吗?嘲笑我很奇怪:)
  • 我个人认为 mocking 是一种更有效的方法。如果您在数据库中插入和回滚数据,那么您不仅在测试代码单元,还在测试网络、网络连接、数据库引擎等。当我编写单元测试时,我想要信心我的代码按预期工作,如果网络中断,我不希望我的测试失败。
  • 好的,模拟它是:) 任何带有模拟会员提供者的具体示例的链接
【解决方案2】:

会员提供者很难模拟和测试,所以我个人不会打扰。然而,我所做的是将我所有的会员代码放在易于测试的类中。

我的大多数自定义提供程序看起来像这样:

public class CustomMembershipProvider : MembershipProvider
    {
        private readonly IUserService _userService;

        public ButlinsMembershipProvider()
        {
            _userService = DI.Resolve<IUserService>();
        }

        public override bool ValidateUser(string username, string password)
        {
            return _userService.Authenticate(username, password);
        }
}

在本例中,我将编写集成测试来验证用户服务的行为。我不测试提供者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多