Как исправить следующую проблему с тестом не выполняется в Visual Studio - PullRequest
0 голосов
/ 22 марта 2020

Когда я пытаюсь запустить свой тест, он показывает следующее.

NUnit3TestExecutor преобразовал 8 из 8 тестовых случаев NUnit Активный тестовый запуск был прерван. Причина: произошел сбой тестового хост-процесса: Процесс завершен из-за исключения StackOverflowException.

У меня есть класс Helper, у которого есть несколько методов. Вот методы.

public class Helper
{
    public void Asserts(HttpWebResponse response)
    {
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    }


    [AttributeUsage(AttributeTargets.Property)]
    public class UseWithApiMethodsAttribute : Attribute
    {
        public UseWithApiMethodsAttribute(params string[] methodNames)
        {
            MethodNames = methodNames;
        }

        public string[] MethodNames { get; private set; }
    }

    public class SelectivePropertyResolver : DefaultContractResolver
    {
        public string ApiMethodName { get; private set; }

        public SelectivePropertyResolver(string apiMethodName)
        {
            ApiMethodName = apiMethodName;
        }

        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            JsonProperty prop = base.CreateProperty(member, memberSerialization);
            if (member.MemberType == MemberTypes.Property)
            {
                var att = ((PropertyInfo)member).GetCustomAttribute<UseWithApiMethodsAttribute>(true);
                if (att == null || !att.MethodNames.Contains(ApiMethodName))
                {
                    prop.Ignored = true;
                }
            }
            return prop;
        }
    }

    public string SerializeForApiMethod(Object model, string methodName)
    {
        var settings = new JsonSerializerSettings
        {
            ContractResolver = new SelectivePropertyResolver(methodName),
            Formatting = Formatting.Indented
        };
        return JsonConvert.SerializeObject(model, settings);
    }
}

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

public class Tags : TagModel
    {
        public string BaseUrl = RequestHandler.GenerateRequestURL("svc- 
 searchcontroller") + "Tag/";
        public Helper helper = new Helper();


    public HttpWebResponse UpdateTag()
        {
            RequestHandler requestor = new RequestHandler(BaseUrl + "UpdateTag", HttpVerb.POST, AuthenticationType.Bearer);
            return requestor.SendRequest(helper.SerializeForApiMethod(modelForUpdate, "UpdateTag"));
        }

  public HttpWebResponse UpdateEndpointsFromTags()
        {
            RequestHandler requestor = new RequestHandler(BaseUrl + "UpdateEndpointsFromTags", HttpVerb.POST, AuthenticationType.Bearer);
            return requestor.SendRequest(helper.SerializeForApiMethod(defaultModel, "UpdateEndpointsFromTags"));
        }

  public HttpWebResponse UpdateEndpointsToTags()
        {
            RequestHandler requestor = new RequestHandler(BaseUrl + "UpdateEndpointsToTags", HttpVerb.POST, AuthenticationType.Bearer);
            return requestor.SendRequest(helper.SerializeForApiMethod(defaultModel, "UpdateEndpointsToTags"));
        }

 public HttpWebResponse UpdateTagToRoot()
        {
            RequestHandler requestor = new RequestHandler(BaseUrl + "UpdateTagToRoot", HttpVerb.POST, AuthenticationType.Bearer);
            return requestor.SendRequest(helper.SerializeForApiMethod(defaultModel, "UpdateTagToRoot"));
        }

   }

Вот мой класс Model, чтобы дать вам представление о том, как я использую класс Helper. После отладки я обнаружил, что при создании экземпляра класса TagModel выдается ошибка

[! [Error img] [1]] [1]


  public class TagModel
    {

        public TagModel defaultModel = new TagModel
        {
            endpointIds = new List<int> { -2147483612, -2147483611 },
            tagIds = new List<int> { 35, 37 },
            id = -2147483639,
            parentId = 37,
            nodeId = 1,
            oldParentId = null,
            isEndpoint = false,
            state = 2,
            destinationTag = 2

        };

        public TagModel modelForUpdate = new TagModel
        {
            tagNode = new TagModel.TagNode
            {
                query = null,
                type = 0,
                filter = null,
                ldapPaths = null,
                editPermissions = 0,
                id = 0,
                disallowed = false,
                name = "NewTag"

            },
            parentId = 7

        };

        [UseWithApiMethods("UpdateTag")]
        public TagNode tagNode { get; set; }


        public class TagNode
        {
            [UseWithApiMethods("UpdateTag")]
            public object query { get; set; }
            [UseWithApiMethods("UpdateTag")]
            public int type { get; set; }
            [UseWithApiMethods("UpdateTag")]
            public object filter { get; set; }
            [UseWithApiMethods("UpdateTag")]
            public object ldapPaths { get; set; }
            [UseWithApiMethods("UpdateTag")]
            public int editPermissions { get; set; }
            [UseWithApiMethods("UpdateTag")]
            public int id { get; set; }
            [UseWithApiMethods("UpdateTag")]
            public bool disallowed { get; set; }
            [UseWithApiMethods("UpdateTag")]
            public string name { get; set; }
        }


        [UseWithApiMethods("UpdateTagToRoot")]
        public int nodeId { get; set; }
        [UseWithApiMethods("UpdateTagToRoot")]
        public object oldParentId { get; set; }
        [UseWithApiMethods("UpdateTagToRoot")]
        public bool isEndpoint { get; set; }
        [UseWithApiMethods("UpdateTagToRoot")]
        public int state { get; set; }
        [UseWithApiMethods("UpdateTagToRoot")]
        public int destinationTag { get; set; }




        [UseWithApiMethods("UpdateEndpointsToTags")]
        public List<int> endpointIds { get; set; }
        [UseWithApiMethods("UpdateEndpointsToTags")]
        public List<int> tagIds { get; set; }


        [UseWithApiMethods("UpdateEndpointsFromTags")]
        public int id { get; set; }
        [UseWithApiMethods("UpdateEndpointsFromTags", "UpdateTag")]
        public int parentId { get; set; }




    }


  [1]: https://i.stack.imgur.com/0wlKr.png
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...