现在我正在使用JUnit,我遇到了EasyMock,我理解两者都是出于同样的目的。 我的理解是否正确?
EasyMock对Junit有什么好处?
哪一个更容易配置?
EasyMock有任何限制吗?
请帮我学习
答案 0 :(得分:7)
当我解释单元测试时,我喜欢将它们描述为一个阶段列表:
jUnit是一个单元测试框架,提供除测试期望以外的所有测试。 Java空间中的替代方案包括:
其他语言等价物包括:
模拟的概念增加了Expectations的新阶段,并且由于jUnit在模拟运动之前看到了它的大部分主要开发,这些功能没有被整合到核心中,并且一组工具填补了这个空白。 java空间已经打开了。这些图书馆包括
所有这些库都是对我列出的任何上述单元测试框架的补充,包括jUnit。他们添加了定义模拟对象的能力。模拟对象获得分配给它们的“期望”,然后在断言阶段声明它们。每个模拟库都以不同的方式实现,但主要模型是
我个人是Expectations方法的粉丝,它更具说明性,并且不易出错,因为它需要较少的方法来被实现者调用,但这是一种风格偏好,而不是技术偏好。
其他语言(因为他们来自单元测试世界晚于java)在大多数情况下没有这个分离。单元测试库和模拟库是同一个。这是phpunit,rspec的情况。我想jUnit很快就不会在本地融入这个版本,因为已经有了这么多丰富的替代模拟库。
答案 1 :(得分:3)
他们不是一回事
JUnit是一个xUnit测试框架 - 它有一个测试运行器,它遍历测试套件,执行每个自动化单元测试并记录结果。
EasyMock是mock-object framework。它用于替换难以设置的合作者与假人/假货/嘲笑,以帮助专注于我打算测试的行为。
例如如果我的SUT.AuditCustomers()调用DAO.GetCustomer(databasePath),在我的测试中我想关注方法AuditCustomers(),所以我使用的是mockDAO,它不会从数据库中读取客户而是返回已知的/ hardcoded Customer对象易于测试。这也有一个好处,即GetCustomer中的任何错误都不会使AuditCustomers()
答案 2 :(得分:0)
我不确定,但我认为JUnit和EasyMock不是互相排斥,而是应该一起工作。 JUnit的想法是测试给定的方法,因此您希望将其他类的虚拟实例注入其中,以确保JUnit测试完全不依赖于其他类方法。在JUnit中提供模拟对象的目的是由EasyMock和其他类似的模拟对象创建者提供。当使用spring将伪实现注入JUnit时,会使用类似的想法。
EasyMock似乎很有前景,但您应该评估Spring或其他一些代理对象生成器是否适合您的场景。