Однократная установка подходящего конструктора не найдена - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь выполнить модульное тестирование написанного мной класса, который переопределяет атрибут авторизации. Я получаю ниже ошибку в этом классе. ниже приведен код для класса.

namespace MyApplicationTests.Unit.Attribute
{
    [TestFixture]
    public class CustomAuthorizeAttributeTests : AuthorizeCreditNote
    {
        private bool hasAccessOnRequestedData;

        public CustomAuthorizeAttributeTests(string Entity, string Key) : base(Entity, Key)
        {
        }

        [Test]
        public void CustomAuthorizeAttributes_ThrowNullArgumentException_WhenParametersAreMissing()
        {

        var authContext = new AuthorizationContext();
        string Entity = string.Empty;
        string Key = string.Empty;
        var attr = new AuthorizeCreditNote(Entity, Key);

        Assert.Throws<Exception>(() => attr.OnAuthorization(authContext));
        }

        [Test]
        public void CustomAuthorizeAttributes_ReturnFalse_IfContextUserDetailsAreNotBeingReviewed()
        {
            var parm1 = "TestParm1";
            var parm2 = "TestParm2";
            var attr = new AuthorizeCreditNote(parm1, parm2);
            Assert.AreEqual(attr.AllowMultiple, false);

        }
    }
}

класс, который тестируется, как показано ниже.

namespace myApplication.Web.Supporting.Attributes.Finance
{
    [AttributeUsageAttribute(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public class AuthorizeCreditNote : AuthorizeAttribute
    {
        protected string entity;
        public string Entity
        {
            get { return this.entity; }
        }

        protected string key;
        public string Key
        {
            get { return this.key; }
        }

        private bool hasAccessOnRequestedData;


        public string Value { get; set; }
        public AuthorizeCreditNote(string Entity, string key)
        {
            this.entity = Entity;
            this.key = key;
        }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            hasAccessOnRequestedData = false;
            if (string.IsNullOrEmpty(Entity) || string.IsNullOrEmpty(Key))
                throw new ArgumentNullException(entity == null ? entity : key);

            var isAuthorized = base.AuthorizeCore(httpContext);
            if (isAuthorized)
            {
                var _customerContext = DependencyResolver.Current.GetService<ICustomerContext>();

                if (Entity == AttributeHelper.CreditNote.Entity)
                {
                    var entityKeyValue = HttpContext.Current.Request.Params[key];
                    var entityReader = DependencyResolver.Current.GetService<ICreditReader>();

                    if (entityReader != null)
                    {
                        var entityResult = entityReader.Get(entityKeyValue.ToString());

                        var expectedCustomerNumber = _customerContext.LoggedInCustomer.MasterAccount?.CustomerNumber ?? _customerContext.LoggedInCustomer.CustomerNumber;
                        hasAccessOnRequestedData = (expectedCustomerNumber == entityResult.CustomerNumber) ? true : false;
                        return hasAccessOnRequestedData;
                    }

                    return true;
                }
            }
            return hasAccessOnRequestedData;
        }
    }
}

При выполнении теста появляется ошибка ниже:

Однократная установка подходящего конструктора не найдена.

1 Ответ

0 голосов
/ 06 сентября 2018

Исключение означает, что тестовая среда не может создать экземпляр вашего тестового класса. Это потому, что он не содержит конструктор без параметров.

Класс, содержащий ваши модульные тесты, не должен наследоваться от класса, который вы пытаетесь протестировать.

Удалите конструктор : AuthorizeCreditNote и CustomAuthorizeAttributeTests(string Entity, string Key).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...