asp.net mvc - Unit Testing account MVC controller Error - real MembershipService is still being used -


i have following account controller

public class accountcontroller : controller {      public imembershipservice membershipservice { get; set; }      protected override void initialize(requestcontext requestcontext)     {         if (membershipservice == null) { membershipservice = new accountmembershipservice(); }          base.initialize(requestcontext);     }      public accountcontroller(imembershipservice membership)     {         membershipservice = membership;     }    [httppost]     public actionresult login(loginmodel model, string returnurl)     {         if (modelstate.isvalid)         {             if (membershipservice.validateuser(model.emailorusername, model.password))             {             .....             }         }    } 

from unit testing project want simulate login

public class accountcontrollertest2 {     [test]     public void login_usercanlogin()     {         string returnurl = "/home/index";         string username = "user1";         string password = "password1";          mock<accountmembershipservice> membership = new mock<accountmembershipservice>();         accountcontroller controller = new accountcontroller(membership.object);          var model = new loginmodel         {             emailorusername = username,             password = password         };          var result = controller.login(model, returnurl) redirectresult;          assert.notnull(result);         assert.areequal(returnurl, result.url);     } } 

my web config in main application uses custommembership provider

<membership defaultprovider="custommembershipprovider">   <providers>     <clear />     <add name="custommembershipprovider" type="qubbasketballmvc.infrastructure.custommembershipprovider" connectionstringname="userscontext" enablepasswordretrieval="false" enablepasswordreset="true" requiresquestionandanswer="false" requiresuniqueemail="false" maxinvalidpasswordattempts="5" minrequiredpasswordlength="6" minrequirednonalphanumericcharacters="0" passwordattemptwindow="10" applicationname="/" />   </providers> </membership> 

i keep getting error

qubbasketballmvc.tests.controllers.accountcontrollertest.login_usercanlogin: system.web.management.sqlexecutionexception : error occurred during execution of sql file 'installcommon.sql'. sql error number 5123 , sqlexception message is: create file encountered operating system error 5(access denied.) while attempting open or create physical file 'c:\program files (x86)\nunit 2.6.3\bin\app_data\aspnetdb_tmp.mdf'. create database failed. file names listed not created. check related errors. creating aspnetdb_7b94db5a0b5b4fbbbe22fa8e91e4cc68 database...

it seems still initializing real membership database, meaning membershipservice hasn't been mocked out. shouldn't need add membership config unit tests, given intend mocking out completely.

you want mock interface service abstraction imembershipservice, viz:

    mock<imembershipservice> membership = new mock<imembershipservice>(); 

as aside, lazy initialization code

if (membershipservice == null)     membershipservice = new accountmembershipservice(); 

isn't ideal testing point of view, given means controller has 2 modes of operation, whereby can either create membershipservice itself, or accept 1 constructor dependency.

as alternative, might consider ioc framework here manage dependency lifespans, , way there 1 set of code tested.


Comments

Popular posts from this blog

java - Intellij Synchronizing output directories .. -

git - Initial Commit: "fatal: could not create leading directories of ..." -