Java Mockito和JMockit之间的比较——为什么Mockito的投票结果比JMockit好?
我正在调查我的项目使用哪种模拟框架,并将其缩小到和 我注意到Mockito在Stackoverflow上被选为“”。Java Mockito和JMockit之间的比较——为什么Mockito的投票结果比JMockit好?,java,unit-testing,mocking,mockito,jmockit,Java,Unit Testing,Mocking,Mockito,Jmockit,我正在调查我的项目使用哪种模拟框架,并将其缩小到和 我注意到Mockito在Stackoverflow上被选为“”。 在比较JMockit的“”上的功能时,JMockit似乎有多个不同的功能 有没有人对Mockito可以做什么有任何特定的信息(不是意见),而这是JMockit无法做到的,反之亦然 我个人更喜欢。 在漂亮、正常和严格的模拟控件之间切换的能力是我最喜欢的特性之一。为了方便地测试我们的遗留代码库(使用大量静态方法调用等),JMockit是非常宝贵的。[我的博客上的无耻插件]我之所以使用
在比较JMockit的“”上的功能时,JMockit似乎有多个不同的功能 有没有人对Mockito可以做什么有任何特定的信息(不是意见),而这是JMockit无法做到的,反之亦然 我个人更喜欢。
在漂亮、正常和严格的模拟控件之间切换的能力是我最喜欢的特性之一。为了方便地测试我们的遗留代码库(使用大量静态方法调用等),JMockit是非常宝贵的。[我的博客上的无耻插件]我之所以使用jMockit,只是因为它在Deencapsultation.class中有反射库。事实上,我喜欢Mockito的风格,但我拒绝改变我的代码和弄乱我的API,只是为了让有限的测试框架可以使用它。我喜欢测试我所有的代码,所以我不想使用一个不能轻松测试私有方法的框架 我被他的行为所左右
在经历了一段(诚然很大的)学习曲线之后,jMockit现在是我的主要模拟单元测试框架。2019年9月更新:唯一的是。如果你使用Spring,答案很明显
我认为竞争是在JMockit和PowerMock之间,然后是Mockito 我会留下“普通”jMock和EasyMock,因为它们只使用proxy&CGLIB,而不像较新的框架那样使用Java5工具 jMock也在4年多的时间里没有一个稳定的版本。JMock2.6.0从RC1到RC2需要2年时间,然后再过2年才真正发布 关于代理和CGLIB与检测: (EasyMock和jMock)基于java.lang.reflect.Proxy, 这需要一个接口 执行。此外,他们 支持创建模拟对象 对于通过CGLIB子类的类 一代正因为如此,他说 课程不能是最终的,也不能是唯一的 可重写的实例方法可以是 嘲笑。但最重要的是,, 使用这些工具时 被测代码的依赖关系(即 是,上的其他类的对象 哪一个类在测试中 (视情况而定)必须由 测试,以便可以创建模拟实例 传递给那些 依赖关系。因此,依赖关系 不能简单地用 客户端类中的新运算符 我们想写单元测试 归根结底,是技术上的局限性 传统模拟工具的应用 以下设计限制适用于 生产代码:
- 首先,PowerMock没有提供完整的模拟API, 而是作为对 另一个工具,目前可以 EasyMock或Mockito。这显然是错误的 现有用户的优势 那些工具
- 另一方面,JMockit提供了全新的API,尽管 其主要API(期望值)与此类似 给EasyMock和jMock。而这 它创造了更长的学习曲线 还允许JMockit提供 更简单、更一致、更容易 使用API
- 与JMockit期望API相比,PowerMock API是 更“低级”,迫使用户 找出并指定哪些类 需要为测试做好准备(使用 @PrepareForTest({ClassA.class, …}(注释)和 要处理的特定API调用 各种语言结构 生产中可能会出现这种情况 代码:静态方法 (mockStatic(ClassA.class)), 建设者 (抑制(构造函数(ClassXyz.class)), 构造函数调用 (expectNew(AClass.class)),部分 模拟(createPartialMock)(ClassX.class, “methodToMock”)等
- 有了JMockit期望,各种方法和构造函数都是 以一种纯粹的陈述方式被嘲弄, 通过指定的部分模拟 @mock中的正则表达式 注释或仅通过“取消模拟” 没有记录的成员 期望;即开发人员 简单地声明一些共享的“mock” 测试类的“字段”,或 “本地模拟字段”和/或“模拟字段” 个别测试的“参数” 方法(在最后一种情况下 @模拟注释通常不会被删除 需要)
- JMockit中提供的一些功能,例如对模拟的支持 等于和hashCode,已重写 方法和其他方法目前还不可用 在PowerMock中支持。还有, 没有与JMockit相当的能力 捕获实例和模拟 指定基函数的实现 在测试执行时键入,不带 测试