首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Mockito 2模拟期末课程

用Mockito 2模拟期末课程
EN

Stack Overflow用户
提问于 2016-12-05 16:57:40
回答 9查看 72.5K关注 0票数 38

我正在从我目前正在进行的项目中删除Powermock,所以我尝试只用Mockito (mockito-core-2.2.28)重写一些现有的单一测试。

当我运行测试时,会出现以下错误:

org.mockito.exceptions.base.MockitoException: 无法模拟/间谍类com.ExternalpackagePath.Externalclass Mockito不能嘲笑/间谍,因为:

  • 最后一班

我知道这个问题已经被问过了(如何用mockito模拟最后一堂课使用Mockito调用最终类静态方法的模拟对象),但是我没有找到我想要的答案。

以下是我的代码摘录:

代码语言:javascript
运行
复制
public class MyClassToTest extends TestCase {
    private MyClass myClass;
    @Mock private Externalclass ext;  // This class is final, I would like to mock it

    @Override
    protected void setUp() throws Exception {
        MockitoAnnotations.initMocks(this); // <<<< The exception is thrown here
        ext = Mockito.mock(Externalclass.class);
    }
}

正如Mockito文档(https://github.com/mockito/mockito/wiki/What%27s-new-in-Mockito-2,§Mock the unmockable)中提到的,我添加了org.mockito.plugins.MockMaker文件。这是我项目的树:

  • 项目
    • 钢筋混凝土
      • com.packagePath.myPackage
        • myClass

代码语言:javascript
运行
复制
- test 
    - com.packagePath.myPackage 
        - myClassToTest
代码语言:javascript
运行
复制
    - resources 
        - mockito-extensions 
            - org.mockito.plugins.MockMaker

我还尝试将“资源”目录放在"src“中,放在一个名为"test”的子目录中,但结果仍然相同。

我以为用莫奇托v2来嘲弄决赛是可能的。有人知道这里缺少什么吗?

谢谢!

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2016-12-06 10:17:21

嗯,我发现了这里的问题,也许对其他人有用。我的项目树是错误的,我将org.mockito.plugins.MockMaker直接放在"src“中的目录”mockito扩展“中。这是我的树:

  • projet
    • 钢筋混凝土
      • com.packagePath.myPackage
        • myClass

代码语言:javascript
运行
复制
    - mockito-extensions  
        - org.mockito.plugins.MockMaker

  • 测试
    • com.packagePath.myPackage
      • myClassToTest

票数 10
EN

Stack Overflow用户

发布于 2017-04-13 06:50:01

奇怪的是你的解决方案似乎奏效了。

根据他们在Github上的文档,它说。

嘲弄最后的类和方法是一种孵化器,可选择的特性。它使用Java代理检测和子类的组合,以启用这些类型的可模拟性。由于这与当前机制的工作方式不同,而且此机制有不同的限制,而且由于我们希望收集体验和用户反馈,因此必须显式激活此功能才能可用;通过创建包含一行的文件src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker,可以通过mockito扩展机制完成此功能: 模拟制造者-内联 创建此文件后,Mockito将自动使用这个新引擎,您可以这样做: final class FinalClass { final String finalMethod() {返回“东西”;} FinalClass FinalClass =新的FinalClass();FinalClass finalMethod=finalMethod(FinalClass.class);给定的(mock.finalMethod()).willReturn(“不再”); 在随后的里程碑中,团队将带来一种使用此功能的编程方式。我们将确定并为所有不可模拟的场景提供支持。请继续关注,请让我们知道您对这个功能的看法!

我的工作结构现在看起来是这样的。

票数 67
EN

Stack Overflow用户

发布于 2017-06-07 20:14:46

我也无法让它处理配置文件;但是,Mockito团队非常友好,并且还提供了一个在目标项目中不需要配置的预配置的Mockito神器

为了方便起见,Mockito团队提供了一个工件,在这里这个模拟制造者是预先配置的。不要使用mockito核心工件,而是在您的项目中包含mockito内联构件。请注意,一旦将对最终类和方法的模拟集成到默认的模拟生成器中,此工件很可能就会停止。

因此,如果使用Gradle并希望测试Kotlin代码,只需将其添加到项目的依赖项中:

代码语言:javascript
运行
复制
testCompile 'org.mockito:mockito-inline:2.8.9'
testCompile('com.nhaarman:mockito-kotlin:1.5.0') {
    exclude group: 'org.jetbrains.kotlin'
    exclude group: 'org.mockito'
}
票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40979402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档