利用反射编写私有 Private 方法的单元测试
2024-10-13 08:28:58
利用反射编写私有 Private 方法的单元测试
最近在添加一个新feature时,鉴于要给自己的代码一是增加代码的强壮性,二是增加代码测试的覆盖率。但是遇到了有些方法是 Private 的,但是在调用这个私有方法的方法里面已经写过测试了。代码就像下面这样:
namespace Test
{
class HttpTest
{
public HttpResponse GetHttpResponse(HttpRequest request)
{
...
GetPrivateValue(request);
...
}
private string GetPrivateValue(HttpRequest request)
{
return System.Text.Encoding.Default.GetString(request.Content);
}
}
}
那么要如何进行这个私有方法的单元测试呢?正好又去阅读了 CLR via C# ,就想到了反射。
那么如何写测试代码呢?
代码示例如下:
Type type = typeof(HttpTest);
var resolveMethod = Activator.CreateInstance(type);//有多个重载,若构造方法不含无参的构造函数,则需要显式传入参数进行初始化
HttpRequest request = new HttpRequest();
obj[] parameter = {request};
MethodInfo methodInfo = type.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
.Where(x => x.Name == "GetPrivateValue" && x.IsPrivate)
.First();
methodInfo.Invoke(resolveMethod,parameter);
首先那个你所需要整个类的 Type 类型,根据这个类 你几乎可以拿到和构造出你所想要的任何东西。
然后就是创建一个 instance 实例,关于你所需要的类的。
接下来就是找到你这个类中的私有方法,然后进行调用,就完成了这个私有方法的测试了。
如果你所要测试的私有方法是个 Generic 泛型的,你需要在 MethodInfo 下面再加一步
MethodInfo genericMethod = methodInfo.MakeGenericMethod(typeof(<T>))
最新文章
- 说说Java程序和数据库交互的乱码解决
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
- 【shell】通配符
- Win 2003下IIS6+Mysql+php5.2 isapi搭建 升级php5.2到5.3测试 借助fastcgi实现
- HDU 4757 Tree 可持久化字典树
- createElement 创建DOM元素
- SQL*Net more data to client
- python3-day3(函数-参数)
- HealthKit开发教程Swift版:起步
- 2.let 和 const
- PeopleRank
- 【运维】在Windows上使用IIS方向代理配置Websocket
- GMT5 install
- python的格式化输出
- Shell 实践、常用脚本
- js中slice方法(转)
- fullPage最后一屏自适应
- C++ 虚函数的使用
- 在 Ubuntu16.04 中搭建 Spark 单机开发环境 (JDK + Scala + Spark)
- Arcgis for JavascriptAPI 常用接口