Unit testing 难以进行单元测试的方法类型?

Unit testing 难以进行单元测试的方法类型?,unit-testing,testing,Unit Testing,Testing,什么单元测试通常很难编写?为什么?我对不需要嘲笑的方法特别感兴趣 感谢单元测试困难的两种情况: 调用属于其他类的静态方法的方法,特别是当其他类具有静态状态或执行重要工作时。在尝试“单元”测试一个通过传递闭包进行数据库查询的方法时陷入了困境,这可能会让人觉得很糟糕 方法直接创建其他类的实例(即,通过new),特别是当其他类的构造函数本身不需要静态时,或者当它在构造器中做了重要的工作时。在Misko的广泛的 单击“缺陷x”链接(它们看起来像纯文本,但它们是独立的链接)。大型复杂方法,可以同时完成许多

什么单元测试通常很难编写?为什么?我对不需要嘲笑的方法特别感兴趣


感谢单元测试困难的两种情况:

调用属于其他类的静态方法的方法,特别是当其他类具有静态状态或执行重要工作时。在尝试“单元”测试一个通过传递闭包进行数据库查询的方法时陷入了困境,这可能会让人觉得很糟糕


方法直接创建其他类的实例(即,通过
new
),特别是当其他类的构造函数本身不需要静态时,或者当它在构造器中做了重要的工作时。

在Misko的广泛的


单击“缺陷x”链接(它们看起来像纯文本,但它们是独立的链接)。

大型复杂方法,可以同时完成许多本来应该分离的事情。(例如:从一个配置对象中获取一些信息,基于一些变量创建一个URL,对URL进行编码,发送请求,对响应执行一些操作……您就可以得到演练了)


一切都是静止的。使用New创建的东西,尽管我还没有找到一种适当的方法来避免它,而不使用工厂对整个应用程序进行垃圾处理。

这几乎总是关于依赖关系

大多数代码依赖于外部系统,如数据库、文件系统、电子邮件客户端、网络等。依赖于主要的内部系统(例如拼写检查模块或recalc引擎…)也很常见

如果这些依赖关系不容易替换,那么系统就很难测试。 调用statics和singleton的类是最坏的违规者,但是任何不通过构造函数或属性接受其依赖关系的类都很难测试

存在一些难以测试的合法情况:

  • 并发性
  • 用户界面-这就是为什么MVC架构的发展趋势,它可以创建易于测试的视图模型。实际渲染被最小化-这在测试文献中称为谦逊对话框或谦逊对象模式

  • 第二句话似乎与问题无关。我已经用静态变量/方法进行了单元测试。糟糕的事情可能会发生。考虑使用依赖注入,你就不必在工厂里浪费应用程序。我会同意,没有DI框架是很难实现的。