Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mockito和JMockit之间的比较——为什么Mockito的投票结果比JMockit好?_Java_Unit Testing_Mocking_Mockito_Jmockit - Fatal编程技术网

Java Mockito和JMockit之间的比较——为什么Mockito的投票结果比JMockit好?

Java Mockito和JMockit之间的比较——为什么Mockito的投票结果比JMockit好?,java,unit-testing,mocking,mockito,jmockit,Java,Unit Testing,Mocking,Mockito,Jmockit,我正在调查我的项目使用哪种模拟框架,并将其缩小到和 我注意到Mockito在Stackoverflow上被选为“”。 在比较JMockit的“”上的功能时,JMockit似乎有多个不同的功能 有没有人对Mockito可以做什么有任何特定的信息(不是意见),而这是JMockit无法做到的,反之亦然 我个人更喜欢。 在漂亮、正常和严格的模拟控件之间切换的能力是我最喜欢的特性之一。为了方便地测试我们的遗留代码库(使用大量静态方法调用等),JMockit是非常宝贵的。[我的博客上的无耻插件]我之所以使用

我正在调查我的项目使用哪种模拟框架,并将其缩小到和

我注意到Mockito在Stackoverflow上被选为“”。
在比较JMockit的“”上的功能时,JMockit似乎有多个不同的功能

有没有人对Mockito可以做什么有任何特定的信息(不是意见),而这是JMockit无法做到的,反之亦然

我个人更喜欢。

在漂亮、正常和严格的模拟控件之间切换的能力是我最喜欢的特性之一。

为了方便地测试我们的遗留代码库(使用大量静态方法调用等),JMockit是非常宝贵的。[我的博客上的无耻插件]

我之所以使用jMockit,只是因为它在Deencapsultation.class中有反射库。事实上,我喜欢Mockito的风格,但我拒绝改变我的代码和弄乱我的API,只是为了让有限的测试框架可以使用它。我喜欢测试我所有的代码,所以我不想使用一个不能轻松测试私有方法的框架

我被他的行为所左右


在经历了一段(诚然很大的)学习曲线之后,jMockit现在是我的主要模拟单元测试框架。

2019年9月更新:唯一的是。如果你使用Spring,答案很明显


我认为竞争是在JMockitPowerMock之间,然后是Mockito

我会留下“普通”jMock和EasyMock,因为它们只使用proxy&CGLIB,而不像较新的框架那样使用Java5工具

jMock也在4年多的时间里没有一个稳定的版本。JMock2.6.0从RC1到RC2需要2年时间,然后再过2年才真正发布

关于代理和CGLIB与检测:

(EasyMock和jMock)基于java.lang.reflect.Proxy, 这需要一个接口 执行。此外,他们 支持创建模拟对象 对于通过CGLIB子类的类 一代正因为如此,他说 课程不能是最终的,也不能是唯一的 可重写的实例方法可以是 嘲笑。但最重要的是,, 使用这些工具时 被测代码的依赖关系(即 是,上的其他类的对象 哪一个类在测试中 (视情况而定)必须由 测试,以便可以创建模拟实例 传递给那些 依赖关系。因此,依赖关系 不能简单地用 客户端类中的新运算符 我们想写单元测试

归根结底,是技术上的局限性 传统模拟工具的应用 以下设计限制适用于 生产代码:

  • 在测试中可能需要模拟的每个类必须实现 一个单独的接口或不是最终的
  • 必须获取要测试的每个类的依赖项 通过可配置的实例创建 方法(工厂或服务) 定位器),或为依赖关系而公开 注射。否则,单元测试就不会成功 能够通过模拟实现 对所属单元的依赖关系 测试
  • 因为只有实例方法可以模拟,所以类需要进行单元测试 无法在上调用任何静态方法 它们的依赖关系,也不能实例化 它们使用任何构造函数
  • 以上内容摘自。此外,它还从几个方面对自身(JMockit)、PowerMock和Mockito进行了比较:

    现在还有其他的模拟工具 Java也克服了 传统方法的局限性, 在他们之间有PowerMock、Jeasystest和 模拟注射。最接近的那个 到JMockit的功能集是 PowerMock,因此我将简要评估 它在这里(此外,另外两个是 更有限,而且似乎没有 积极发展)

    JMockit vs PowerMock
    • 首先,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相当的能力 捕获实例和模拟 指定基函数的实现 在测试执行时键入,不带 测试