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