وحدة اختبار مخصص مزود العضوية مع NUnit يلقي خطأ مرجع فارغة

StackOverflow https://stackoverflow.com/questions/187125

سؤال

ومحاولة لإنشاء حساب المستخدم في الاختبار. ولكن الحصول على مرجع كائن لم يتم تعيين إلى instanve خطأ الكائن عند تشغيله.

وهنا عضويتي الدرجة مزود، أنه كان 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", "someone@somewhere.co.uk", "Question", "Answer", true, Guid.NewGuid(), out status);
        }
    }

وكان يلقي على خط provider.CreateUser

هل كانت مفيدة؟

المحلول

وأنا متأكد تماما يجب عليك الاتصال provider.Initialize (...) في التعليمات البرمجية الاختبار قبل استدعاء CreateUser.

نصائح أخرى

وكان أي شخص حسنا ليس تماما الجواب. كان csgero على الطريق الصحيح كأن تهيئة المشكلة. ولكن مجرد الدعوة التي مباشرة ليست حلا. يعمل هذا:

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

وأعتقد أن instantiating مزود عضويتي مباشرة يتطلب تحديد خصائص التكوين عادة المخزنة في app.config أو الملف web.config ثم استدعاء تهيئة. استدعاء الأسلوب CreateUser ثابت على ذلك الطبقة Mebership يسبب التهيئة للقراءة، ثم النوع المحدد في التكوين يتم تحليل، تحميل وinitialised.

هل الخطأ مباشرة على provider.CreateUser أو في مكان ما أسفل كومة داخله - ربما كنت قد تحقق لاغية قبل استدعاء

وربما التبعية مفقود - هل حصلت على DB في DLL ذات الصلة على الطريق

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top