Home
About Me
Categories
C#
(11)
ASP.NET
(34)
JavaScript
(6)
CSS
(1)
XSLT
(1)
Unit Testing
(22)
Architecture
(23)
Ajax
(8)
LINQ to SQL
(2)
ASP.NET MVC
(5)
Life
(18)
Book Reviews
(2)
WPF
(13)
Projects
(2)
Unit Testing Role Providers in ASP.NET 2.0
published on 6/5/2008 7:51:45 AM
Some time back I blogged about unit testing Membership Provider "
Membership Provider and Unit Testing
"
as it turned out I was missing the unit tests for Role Provider. In
this post I will explain how to unit test the Role Provider.
First of all here is the implementation of the role provider.
public class VirtualRoomRoleProvider : SqlRoleProvider
{
private NameValueCollection _roleConfig = new NameValueCollection();
public VirtualRoomRoleProvider()
{
_roleConfig.Add("applicationName", "VirtualRoom");
_roleConfig.Add("connectionStringName", "VirtualRoomConnectionString");
this.Initialize("VirtualRoomRoleProvider", _roleConfig);
}
}
Inside the constructor I am initializing the RoleProvider.
Now, here is the App.config which is inside the TestSuite class library.
<system.web>
<roleManager enabled="true" defaultProvider="VirtualRoomRoleProvider" cacheRolesInCookie="true"
cookieName="VirtualRoomCookie">
<providers>
<add name="VirtualRoomRoleProvider" type="System.Web.Security.SqlRoleProvider"
connectionStringName="VirtualRoomConnectionString" applicationName="VirtualRoom"/>
</providers>
</roleManager>
<membership defaultProvider="VirtualRoomProvider">
<providers>
<remove name="AspNetSqlMembershipProvider"/>
<add applicationName="VirtualRoom" requiresQuestionAndAnswer="false"
requiresUniqueEmail="true" minRequiredNonalphanumericCharacters="0"
enablePasswordReset="true" passwordFormat="Hashed" connectionStringName="VirtualRoomConnectionString"
name="VirtualRoomProvider" type="DomainObjects.Providers.VirtualRoomProvider,DomainObjects" />
</providers>
</membership>
</system.web>
And finally here are the tests.
[TestFixture]
public class when_a_user_is_assigned_a_role : BaseTest
{
[Test]
public void should_be_able_to_initialize_role_provider()
{
VirtualRoomRoleProvider roleProvider = new VirtualRoomRoleProvider();
Assert.AreEqual("VirtualRoom", roleProvider.ApplicationName);
Assert.AreEqual("VirtualRoomRoleProvider", roleProvider.Name);
}
[Test]
public void should_verify_that_the_roles_exists()
{
Assert.IsTrue(_roleProvider.GetAllRoles().Count() > 0,"No roles exists");
}
[Test]
[RollBack]
public void should_assign_the_student_role_to_the_new_user()
{
MembershipUser user = _provider.CreateUser(_username, _password, _email, null, null, true, null, out _status);
Assert.IsTrue(_roleProvider.IsUserInRole(user.UserName, "Student"),"User is not a student!");
}
}
The BaseTest class does all the work to initialize the variables.
[TestFixture]
public class BaseTest
{
protected string _username;
protected string _password;
protected string _email;
protected VirtualRoomProvider _provider;
protected NameValueCollection _config;
protected MembershipCreateStatus _status = new MembershipCreateStatus();
protected SqlRoleProvider _roleProvider;
protected NameValueCollection _roleConfig;
[SetUp]
public void initialize()
{
_username = "mary";
_password = "marykate$";
_email = "marykate@gmail.com";
// setup the membership provider
_provider = new VirtualRoomProvider();
_config = new NameValueCollection();
_config.Add("applicationName", "VirtualRoom");
_config.Add("name", "VirtualRoomProvider");
_config.Add("requiresQuestionAndAnswer", "false");
_config.Add("connectionStringName", "VirtualRoomConnectionString");
_provider.Initialize(_config["name"], _config);
_status = new MembershipCreateStatus();
_roleProvider = new SqlRoleProvider();
// setup the role provider
_roleConfig = new NameValueCollection();
_roleConfig.Add("applicationName", "VirtualRoom");
// _roleConfig.Add("name", "VirtualRoomRoleProvider");
_roleConfig.Add("connectionStringName", "VirtualRoomConnectionString");
_roleProvider.Initialize("VirtualRoomRoleProvider", _roleConfig);
Console.WriteLine("Setup is fired");
}
}
The BaseTest class allows me to use reuse the variables in other classes and tests.
Name:
Name:
Email:
Comment/Feedback: