c# 单元测试 ,对静态方法(static)和私有方法(private) 进行单元测试
利用反射:
/// <summary>
/// 调用静态方法
/// </summary>akf
/// <param name="t">类全名</param> /// <paramname="strMethod">方法名</param> /// <paramname="aobjParams">参数表</param> /// <returns>函数返回值</returns> public static object RunStaticMethod(System.Type t, string strMethod, object[] aobjParams)
{ BindingFlags eFlags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic; return RunMethod(t, strMethod, null, aobjParams, eFlags); } /// <summary> /// 调用实例方法 /// </summary> /// <param name="t">类全名</param> /// <paramname="strMethod">方法名</param> /// <paramname="objInstance">类的实例</param> ///<paramname="aobjParams">参数表</param> ///<returns>函数返回值</returns> public static object RunInstanceMethod(System.Type t, string strMethod, object objInstance, object[] aobjParams)
{ BindingFlags eFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; return RunMethod(t, strMethod, objInstance, aobjParams, eFlags); } private static object RunMethod(System.Type t, string strMethod, object objInstance, object[] aobjParams, BindingFlags eFlags)
{ MethodInfo m; try
{ m = t.GetMethod(strMethod, eFlags); if (m == null)
{ throw new ArgumentException("There is no method '" + strMethod + "' for type'" + t.ToString() + "'."); } object objRet = m.Invoke(objInstance, aobjParams); return objRet; } catch
{ throw; } }
在测试的时候例子:
假如在windows form1中有2个方法,分别是一个静态方法和一个私有实例方法如下:
private static string StaticMethod(string s, int i)
{ return s+i; } private string InstanceMethod(string s, int i)
{ return s + i; }
测试代码可以这样调用:
[TestMethod]
public void TestInstanceMethod()
{
Form1 f = new Form1();
//f.msg(f);
//f.button1_Click(null, null);
string ret = "" + RunInstanceMethod(typeof(Form1), "InstanceMethod", f, new object[] { "123", 123 });
Assert.AreEqual(ret, "123123");
}
[TestMethod]
public void TestStaticMethod()
{
string ret = "" + RunStaticMethod(typeof(Form1), "StaticMethod", new object[] { "123", 123 });
Assert.AreEqual(ret, "123123");
}
c# 单元测试 ,对静态方法(static)和私有方法(private) 进行单元测试的更多相关文章
- 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类
1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...
- 面向对象之静态方法(static)和实例化方法的区别
这是一个经常被时时提出来的问题,很多时候我们以为理解了.懂了,但深究一下,我们却发现并不懂. 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简 ...
- java接口的演变(jdk8的default、静态方法,jdk9的私有方法、私有静态方法)
目录: 接口的定义 jdk7-9,接口属性的变化 jdk8,default.public static method的提出解决了什么问题,使用时需要注意什么 jdk9的补充(引入private met ...
- Java 静态方法、私有方法、常量的使用
1.静态方法 2.私有方法 3.常量 4.接口小结
- 我要告诉你:java接口中可以定义private私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
- JUnit 3.8 通过反射测试私有方法
测试私有(private)的方法有两种: 1)把目标类的私有方法(修饰符:private)修改为(public),不推荐,因为修改了源程序不佳 2)通过反射 (推荐) 代码演示: 目标程序 Priva ...
- Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法
类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...
- junit单元测试中私有方法测试
1.单元测试可以对系统逻辑进行每个单元模块的测试. 2.单元测试也可以作为回归测试的依据,可以避免升级完善功能时引入问题. 3.单元测试要求将代码写的更清晰,更易于测试. 4.有时单元测试需要测试私有 ...
- JavaScript【面向对象】-静态方法-私有方法-公有方法-特权方法
JavaScript面向对象是近年来比较火的一个概念了,由于小弟才疏学浅,虽然做过不少的web项目,看了网上很多深奥的资料和教程,还是对他们深奥 的理论一知半解,前段时间看了点书,总算有了自己的理解, ...
随机推荐
- 第七篇 CSS盒子
CSS盒子模型 在页面上,我们要控制元素的位置,比如:写作文一样,开头的两个字会空两个格子(这是在学校语文作文一样),其后就不会空出来,还有,一段文字后面跟着一张图,它们距离太近,不好看,我们要移 ...
- react如何通过shouldComponentUpdate来减少重复渲染
转自:https://segmentfault.com/a/1190000016494335 在react开发中,经常会遇到组件重复渲染的问题,父组件一个state的变化,就会导致以该组件的所有子组件 ...
- springboot启动端口占用问题,报错org.apache.catalina.LifecycleException: Protocol handler start failed
解决办法,找到被占用的端口
- JS异步上传文件
直接调用Upload(option)方法,即可上传文件,不需要额外的插件辅助,采用原生js编写. /* *异步上传文件 *option参数 **url:上传路径 **data:上传的其他数据{id:& ...
- JVM内存区域划分总结
发现网上有两个版本的JVM内存划分,一个是按照<深入理解JVM虚拟机>上的版本,包含程序计数器等,按照是否线程共享划分. 另一个我觉得更好记一些,也更适合我自己,在这里记录一下. 首先上思 ...
- 反selenium关键字
webdriver __driver_evaluate __webdriver_evaluate __selenium_evaluate __fxdriver_evaluate __driver_un ...
- linux版宝塔安装Redis
1安装服务 2配置设置 3安装PHP扩展 首先,我们来安装服务,进入管理面板--软件管理--运行环境--redis-点击安装,等待完成 完成之后开始第二步,配置设置.这一步根据自己需要进行配置.注意安 ...
- 01-jar包操作---idea打jar包
文章:idea打包java可执行jar包 maven项目的话,使用maven命令,直接build就可以打jar包.
- jmeter使用jdbc连接mysql数据库遇到的问题
问题一.已将myql的jar包放在jmeter5.1的lib目录下并重启过jmeter,连接数据库提示 Cannot create JDBC driver of class 'com.mysql.jd ...
- 从头开始 — CSS — 垂直居中
事实上,每次面试前端必问的问题就是这个.及其常见的需求,看起来似乎非常简单,但是实现起来很费劲,尤其是涉及尺寸不固定的元素. 本篇文章将介绍比较流行的几种方法. 行内块 <body> &l ...