C# 接受MethodInfo对象的方法的单元测试
我需要为tess提供一个方法,该方法接收某个任意用户代码方法的MethodInfo对象(通过反射动态加载) 我想使用不同的MethodInfo对象来练习这个方法 最简单的方法是使用C# 接受MethodInfo对象的方法的单元测试,c#,.net,unit-testing,C#,.net,Unit Testing,我需要为tess提供一个方法,该方法接收某个任意用户代码方法的MethodInfo对象(通过反射动态加载) 我想使用不同的MethodInfo对象来练习这个方法 最简单的方法是使用.GetMethod(“name”)检索MethodInfo对象,然后使用它调用测试方法并对结果进行断言 我想介绍尽可能多的“不同”方法信息(或者更具体地说,尽可能多地传递不同的方法) 我正在考虑两种方法,不确定是否应该这样做: 创建一个新的测试类,其中包含我需要的所有方法。使用此类型的GetMethods()并迭代这
.GetMethod(“name”)
检索MethodInfo对象,然后使用它调用测试方法并对结果进行断言
我想介绍尽可能多的“不同”方法信息(或者更具体地说,尽可能多地传递不同的方法)
我正在考虑两种方法,不确定是否应该这样做:
SomeMethod
(处理此MethodInfo)中的逻辑具有处理所有类型MethodInfo的通用逻辑,则按上述路线执行
为每个方法创建一个单独的单元测试
如果
SomeMethod
中的逻辑对各种类型的MethodInfo都有具体的逐案逻辑,那么就按照上面的方法进行。我认为你想进行过度测试,你只需要测试所有的情况来覆盖整个代码(包括方法内部调用的函数生成的异常)。除此之外,使用您想要测试的所有不同类型的方法对虚拟类的方法进行迭代似乎是一种很好的方法?MethodInfo是从反射中获得的。考试的期望是什么?我们的应用程序动态获取用户的方法,将其参数序列化为xml并显示它。我想确保无论在我们的应用程序中抛出哪个方法,它都能成功地处理并在XML中显示其参数。第一个选项的唯一问题是它包含多个断言。这意味着测试将在第一次断言失败时失败,并且不会显示所有可能的失败案例。此外,通过测试名称(与名称中包含确切场景的测试相反)更难找出错误所在。是的,这是正确的。但这不是我的观点。控制选择的是SomeMethod
的内部实现。SomeMethod不关心您输入的是哪种方法信息。这是一个支持任何类型对象的通用方法。好了!选择1。原因是1失败或10失败都无关紧要,因为要修复SomeMethod
中的失败,我们不必执行任何特定的案例逻辑。
public string SomeMethod(MethodInfo methodInfo);