【发布时间】:2011-12-27 02:29:27
【问题描述】:
我听说一些我无法交谈的人是 jmock 的忠实粉丝。我从事以测试为中心的开发多年,所以我浏览了网站并查看了一些文档,但仍然无法弄清楚它有什么好处。
我在使用 spring 时遇到了同样的问题。如果您已经了解它是什么,他们的文档会很好地解释它,所以我不认为 jmock 没有价值。我只是不明白它对我有什么作用。
如果 jmock 为我提供了模拟存根数据的能力,那么让我们举一个例子来说明我是如何做事的,看看 jmock 会变得更好。
假设我的 UI 层说,为我创建一个小部件和小部件服务,在创建小部件时,初始化小部件并将其部分存储在组成小部件所需的三个表中。
当我编写测试时,我会这样做。
首先,我将 hibernate 重新指向我的测试超音速数据库,这样我就不必进行大量数据库设置了。 Hibernate 为我创建表。
我对我的类的所有测试都有静态工厂方法,它们为我构建了类的测试实例。我的每个 DAO 创建指向测试模式的测试版本。然后我的服务类有一个使用测试类生成的 DAO 构建自己的服务类。
现在,当我运行调用服务的 UI 控制器的测试时,我正在通过应用程序测试我的代码。诚然,这不是进行单元测试时通常想要的完全隔离,但在我看来,它为我提供了更好的单元测试,因为它通过所有支持层一直执行真实代码。
因为休眠状态下的 Hypersonic 速度很慢,所以运行我的所有测试需要稍长一些的时间,但我的整个构建仍然在旧计算机上运行不到五分钟即可完成构建和打包,所以我觉得这是可以接受的。
我将如何使用 jmock 做不同的事情?
【问题讨论】:
-
您的意思是一般的模拟,或者 jmock 而不是 mockito 或 easymock 或其他什么?
-
好吧,我对其他工具不熟悉,所以我猜一般。
-
所以看起来模拟对象正在通过测试的工厂方法填充到我的模型中,并且测试是通过单独测试还是通过所有层来改进是一个品味问题.我理解正确吗?
-
@Thom:不完全是。这不仅仅是品味问题。集成测试有优点也有缺点。单元测试有优点也有缺点。如果你只做一个,你的测试可能没有它们应该的那么有用。