c# - 如何解决在 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
解决方案
推荐阅读
- django - 使用嵌套序列化程序 Django REST 框架获取 n 条随机记录
- python - Python Tkinter 滚动条和框架未显示所有复选框
- docker - 在 Dockerfile 中设置用户空间 windows env var
- javascript - 尝试使用 while 循环打印递减反向数组
- r - 在选择要加入的列时加入多个 data.frame
- python - ValueError:列必须与键长度相同,在 spyder 和 jupyter 笔记本中可以正常工作,但在 pycharm 中不能
- python - 什么是健身房。空间?
- c# - 读取给定线程的 AsyncLocal 值
- angular - 如果一个动作已在另一个动作中分派,如何进行单元测试?
- vb.net - 初始化 WCF 客户端 (MVVM) 时出现异常