繁体   English   中英

关于模拟框架

[英]About mocking frameworks

我正在使用powermockpowermock我有几个问题。

  1. 我们是否需要修改我们的代码,以防我们在稍后阶段发现它无法通过powermockmockito或任何其他测试框架进行测试? 即我们应该停止编写一些框架无法测试的静态/私有方法(我知道powermock具有测试这些方法的能力)

  2. 在模拟/监视对象时,应调用实际方法吗? 即我通过在方法调用中保留调试点来进行检查,执行是否应该转到调试点?

请帮助我理解这些事情。

1.)无法测试/测试能力差的代码通常是设计不良的标志,因此,是的,您应该更改代码。 大量的静态方法/状态是一种代码异味,这意味着糟糕的设计并最终导致更高的维护工作。 私有方法通常应该在其公共调用程序中进行测试,因为它们只是助手。 我认为私有方法永远不应直接进行测试,因为它们可能随时通过重构更改,因为类的公共接口应该是稳定的。

2.)模拟时,不应调用目标方法/对象。 侦查时应调用间谍方法/对象

我被带到一个拥有庞大遗留系统的团队中,但是他们正在为其添加新的类/方法。 这些类和方法将涉及多达10个DAO / DAL。 但是,这些DAO / DAL已经运行了20多年,并且很少出现故障。 因此,他们的行为非常值得期待。 在这种情况下使用模拟效果很好,我可以为新代码编写纯粹的单元测试,并模拟所有DAO返回对象/或异常以检查边界情况。

当您必须访问数据库,通过Internet建立连接或拥有不希望实例化仅从其中调用一个方法的特别大的类时,Mocks非常有用。 如果您的类在其构造函数中需要很多对象(每个对象都需要实例化),但实际上您只需要获取Class.CanRetry()(它将返回true或false),那么模拟就可以在这个实例。

锤子是个不错的工具,但至少不会帮您疏通马桶。 cks是知道如何使用的好工具,但是有时间和地点。

有关如何/何时使用模拟的更多信息,请参考这两篇精彩的文章:

何时模拟

嘲笑不是存根 (读得更长一些,但信息很多)

关于您的第二个问题,下一篇文章将使您对所有不同类型的“测试双打”之间的区别有最好的了解,其中包括模拟对象,测试间谍,虚拟对象等。 敏捷工程:测试双打

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM