大部分Mokc框架是不支持mock静态方法的,那我们如何测试静态方法呢?

下面这个类包含了一个静态方法:

public class MyHelper
{public static string GetHelp(){return "This is help";}
}

这个类调用了上面的Helper类中的静态方法

public class MyManager
{public bool IsManaged { get; set; }public void Manage(){string help = MyHelper.GetHelp();IsManaged = (!string.IsNullOrEmpty(help));}
}

如果我们需要测试MyManager类,那么我们就需要mock MyHelper.GetHelp() 方法,因为MyHelper类我们无法从外面传入,也无法时候用mock框架来mock。这个类得Manage()方法变得无法测试。

解决方案:

1,如果所有代码你都可以修改,那么,最简单的方法就是避免静态方法,将静态方法转移到一个实体类中,并且使用interface隔离接口和实现逻辑。

2,如果静态方法你无法修改,比如说是系统提供的帮助类,那么将静态方法转移到一个实体类中,但是使用一个代理函数调用静态方法,并且使用interface隔离接口和实现逻辑。

3,如果静态方法你无法修改,还有一个比较快的方法就是,增加一个protected virtual 的成员方法,代理调用静态方法。测试时,override 这个方法。

一些问题:

如何mock你要测试类中的一些方法?

有一些时候,你测试某个类中的一个方法,这方法会调用这个类中的其他成员方法,处于某种原因,对于这些依赖的成员方法,你也许想mock出来。

如何mock一个private方法?

参考:

TDD: Mock static method

MoQ Mocks – Use virtual method or interfaces?

How to mock static class or static member for testing

转载于:https://www.cnblogs.com/DotNetNuke/archive/2011/04/13/2014826.html

.Net 中如何测试静态方法相关推荐

  1. 第32节:Java中-构造函数,静态方法,继承,封装,多态,包

    构造函数实例 class Cat{// 设置私有的属性 name private String name;// 设置name的方法public void setName(String Name) {t ...

  2. Exception in thread main java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static;只能在静态类型或顶级类型中才能声明静态方法

    Exception in thread "main" java.lang.Error: 无法解析的编译问题: 方法 main 不能声明为 static:只能在静态类型或顶级类型中才 ...

  3. 测试驱动开发与行为驱动开发中的测试先行方法

    Gil Zilberfeld将在 Agile Practitioners会议上举办小型研讨会,讨论测试先行(test first)方法,测试驱动开发(TDD)和行为驱动开发(BDD)的基础. \\ \ ...

  4. java 静态方法重写_Java 类中可以覆盖静态方法吗?

    Java技术栈 www.javastack.cn 打开网站看更多优质文章 Java 类中可以覆盖静态方法吗? 不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为 ...

  5. Kotlin中的Java静态方法等效于什么?

    本文翻译自:What is the equivalent of Java static methods in Kotlin? There is no static keyword in Kotlin. ...

  6. Java 类中可以覆盖静态方法吗?

    Java 类中可以覆盖静态方法吗? 不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为隐藏在Java中的方法. 你不能覆盖Java中的静态方法,因为方法覆盖基于 ...

  7. Python中的测试工具

    当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试过程 ...

  8. python代码测试工具模块_详解Python中的测试工具

    当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试过程 ...

  9. Spring Boot中的测试

    文章目录 简介 添加maven依赖 Repository测试 Service测试 测试Controller @SpringBootTest的集成测试 Spring Boot中的测试 简介 本篇文章我们 ...

最新文章

  1. cuDNN 功能模块解析
  2. 实现对学生信息的增加操作
  3. 法国时隔20年再折桂!“网易云信:世界杯巅峰决战之夜”活动圆满结束!
  4. MQ问题集(kafka主从同步与高可用,MQ重复消费、幂等)
  5. The driver is automatically registered via the SPI and manual loading of the
  6. json mysql php_PHP MySQL连接表作为JSON
  7. 未定义jm matlab,math – 使用Jm 1 = 2mj(m)-j(m-1)公式在MATLAB中计算bessel函数
  8. 在微信源代码共享仿乐趣, 把你的业务微信
  9. 前端开发工程师面试题
  10. Win7Office2010Flash控件无法使用“此演示文稿中一些控件无法激活,可能这些控件未在此计算机中注册“
  11. SQL Express
  12. css中的单位换算_GitHub - WangQiangrong/cssUnitTransform: css单位转换工具
  13. 通过Adobe Scout深入理解Flash播放器
  14. 【Python】使用Selenium实现淘宝抢单
  15. 主成分回归之后预测_回归分析之主成分回归
  16. 五个方向告诉你如何运营好一个公众号!
  17. Matlab——图形绘制——三维立体图形 剔透玲珑球 动态图——彗星状轨迹图
  18. Stream Collectors - joining
  19. 【刷机】LG G2 能进入recovery但是不能进入新系统,can't open file ,G2刷TOT
  20. 【C++】最近公共祖先 LCA

热门文章

  1. 1099 Build A Binary Search Tree
  2. 1054 The Dominant Color
  3. 想转行学软件测试要注意哪些问题
  4. Fortify 17.10进行源代码安全扫描的方法
  5. ActiveMQ快速入门
  6. maven学习(4)-Maven 构建Web 项目
  7. mysqldump和xtrabackup备份原理实现说明
  8. 去除ios input部分默认样式
  9. ListView中CheckBox使用问题
  10. 3个题目熟悉类和对象基础