2008-10-09 5 views
0

Пытается создать учетную запись пользователя в тесте. Но при установке ссылки на объект не устанавливается установка ошибки объекта при ее запуске.Единичный тест Пользовательский поставщик членства с NUnit бросает ошибку нулевой ссылки

Вот мое ЧЛЕНСТВО класса поставщика, это в библиотеке классов MyCompany.MyApp.Domain.dll:

using System; 
using System.Collections.Generic; 
using System.Web.Security; 

namespace MyCompany.MyApp.Domain 
{ 
    public class MyMembershipProvider : SqlMembershipProvider 
    { 
     const int defaultPasswordLength = 8; 
     private int resetPasswordLength; 

     public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 
     { 
      resetPasswordLength = defaultPasswordLength; 
      string resetPasswordLengthConfig = config["resetPasswordLength"]; 
      if (!String.IsNullOrEmpty(resetPasswordLengthConfig)) 
      { 
       config.Remove("resetPasswordLength"); 

       if (!int.TryParse(resetPasswordLengthConfig, out resetPasswordLength)) 
       { 
        resetPasswordLength = defaultPasswordLength; 
       } 
      } 
      base.Initialize(name, config); 
     } 

     public override string GeneratePassword() 
     { 
      return Utils.PasswordGenerator.GeneratePasswordAsWord(resetPasswordLength); 
     } 
    } 
} 

Вот мой App.config моих индивидуального теста библиотеки классов MyCompany.MyApp.Doman.Test.dll который ссылается мой бизнес библиотека домена выше:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings> 
     <add name="SqlServer" connectionString="data source=mycomp\SQL2008;Integrated Security=SSPI;Initial Catalog=myDatabase" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <system.web> 
     <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="15"> 
      <providers> 
       <clear/> 
       <add name="MyMembershipProvider" 
        type="MyCompany.MyApp.Domain.MyMembershipProvider,MyCompany.MyApp.Domain" 
        connectionStringName="SqlServer" 
        applicationName="MyApp" 
        minRequiredNonalphanumericCharacters="0" 
        enablePasswordRetrieval="false" 
        enablePasswordReset="true" 
        requiresQuestionAndAnswer="false" 
        requiresUniqueEmail="true" 
        passwordFormat="Hashed"/> 
      </providers> 
     </membership> 
    </system.web> 
</configuration> 

Вот мой метод, который бросает «ссылка на объект не указывает на instanve объекта»

public class MemberTest 
    { 
     public static void CreateAdminMemberIfNotExists() 
     { 
      MembershipCreateStatus status; 
      status = MembershipCreateStatus.ProviderError; 

      MyMembershipProvider provider = new MyMembershipProvider(); 

      provider.CreateUser("Admin", "password", "[email protected]", "Question", "Answer", true, Guid.NewGuid(), out status); 
     } 
    } 

он бросает на линии provider.CreateUser

ответ

2

Я уверен, что вы должны позвонить провайдеру. Инициализировать (...) в тестовом коде перед вызовом CreateUser.

+0

Но что вы передаете в NameValueCollect для конфигурации? – Coppermill

0

ли ошибка непосредственно на provider.CreateUser или где-нибудь в стеке внутри него - возможно, вы могли бы проверить на нуль перед вызовом.

Возможно, отсутствует зависимость - есть ли у вас соответствующие DLL-файлы на пути?

1

Ну, не совсем у кого был ответ. csgero был на правильном пути, хотя инициализация была проблемой. Но просто называть это напрямую не было решением. Это работает:

public class MemberTest 
    { 
     public static void CreateAdminMemberIfNotExists() 
     { 
      MembershipCreateStatus status; 
      MembershipUser member = Membership.CreateUser("Admin", "password", "[email protected]", "Question", "Answer", true, out status); 
     } 
    } 

Я считаю инстанцирование моего поставщика членства напрямую требует установки свойств конфигурации обычно хранится в app.config или web.config, а затем вызов инициализации. Однако вызов статического метода CreateUser в классе Mebership вызывает чтение конфига, затем тип, указанный в конфиге, анализируется, загружается и инициализируется.

 Смежные вопросы

  • Нет связанных вопросов^_^