首页 > 解决方案 > 如何解决在 Visual Studio 中未执行测试的以下问题

问题描述

当我尝试运行我的测试时,它会显示以下内容。

NUnit3TestExecutor 转换了 8 个 NUnit 测试用例中的 8 个 活动测试运行被中止。原因:测试主机进程崩溃:由于 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);
    }
}

我在另一个名为 Tagg.cs 的类中调用 SerializeForApiMethod,它继承了我的模型类,如下所示。在这里,我从我的模型类中序列化。我给模型类实例引用名称和方法名称

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 类的实例时会报错

[![错误图像][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

标签: c#apitestingnunit

解决方案


推荐阅读