2012-05-18 121 views
0

我正在使用自定义asp.net成员资格提供程序,并使用nhibernate数据访问代码,这很好。现在我需要使用测试来锻炼这些方法。测试自定义ASP.NET成员资格提供程序

有兴趣提出这些方法应该如何测试的人?提供一些链接来解释使用一些标准的测试方法可能?

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

+0

你试过这个吗? http://geekswithblogs.net/AzamSharp/archive/2007/12/30/118071.aspx – Grunf

回答

1

当涉及到单元测试,做与数据库或第三方库的东西,你应该去耦这些依赖关系,使任何代码的测试,只有测试你的代码。例如,如果我们的成员资格提供程序中有一个用于添加单个用户的方法,那么我们要测试的是我们的单一方法的代码正常工作,而不是数据库已启动并正在运行,或者该方法由此方法调用工作。即使数据库处于脱机状态,或者其他类的方法调用失败,我们的单元测试仍应该通过。

这是Mocking进场的地方。你会想要嘲笑你的数据上下文,并设置你将要使用的任何方法,这样你就可以控制它的响应。

仔细查看您的会员提供商的方法。每个人应该做什么?这是你真正想测试的唯一的东西。这种方法作为一个独立的单位来完成我期待的工作吗?

+0

我想在没有模仿的情况下在成员资格提供者中测试我的方法,例如,使用CreateUser方法将新用户添加到数据库表中,回滚事务在测试之前离开db。我应该遵循这种方法吗?嘲笑奇怪的我:) – panjo

+0

我个人认为嘲笑是一种更有效的方法。如果你在你的数据库中插入和回滚数据,那么你不仅仅是测试你的代码单元,你正在测试网络,网络连接,数据库引擎等等。当我编写单元测试时,我想要自信我的代码能够像我期望的那样工作,并且如果网络出现故障,我不希望我的测试失败。 –

+0

好吧,嘲笑它:)任何链接与嘲笑会员供应商的具体例子 – panjo

0

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

我大部分的自定义提供的是这个样子:

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); 
     } 
} 

在这个例子中,我会写集成测试,以验证用户服务的行为。我不测试提供者。

相关问题