我正在从我目前正在进行的项目中删除Powermock,所以我尝试只用Mockito (mockito-core-2.2.28)重写一些现有的单一测试。
当我运行测试时,会出现以下错误:
org.mockito.exceptions.base.MockitoException: 无法模拟/间谍类com.ExternalpackagePath.Externalclass Mockito不能嘲笑/间谍,因为:
我知道这个问题已经被问过了(如何用mockito模拟最后一堂课,使用Mockito调用最终类静态方法的模拟对象),但是我没有找到我想要的答案。
以下是我的代码摘录:
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文件。这是我项目的树:
- test 
    - com.packagePath.myPackage 
        - myClassToTest    - resources 
        - mockito-extensions 
            - org.mockito.plugins.MockMaker我还尝试将“资源”目录放在"src“中,放在一个名为"test”的子目录中,但结果仍然相同。
我以为用莫奇托v2来嘲弄决赛是可能的。有人知道这里缺少什么吗?
谢谢!
发布于 2016-12-06 10:17:21
嗯,我发现了这里的问题,也许对其他人有用。我的项目树是错误的,我将org.mockito.plugins.MockMaker直接放在"src“中的目录”mockito扩展“中。这是我的树:
    - mockito-extensions  
        - org.mockito.plugins.MockMaker
发布于 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(“不再”); 在随后的里程碑中,团队将带来一种使用此功能的编程方式。我们将确定并为所有不可模拟的场景提供支持。请继续关注,请让我们知道您对这个功能的看法!
我的工作结构现在看起来是这样的。

发布于 2017-06-07 20:14:46
我也无法让它处理配置文件;但是,Mockito团队非常友好,并且还提供了一个在目标项目中不需要配置的预配置的Mockito神器。
为了方便起见,Mockito团队提供了一个工件,在这里这个模拟制造者是预先配置的。不要使用mockito核心工件,而是在您的项目中包含mockito内联构件。请注意,一旦将对最终类和方法的模拟集成到默认的模拟生成器中,此工件很可能就会停止。
因此,如果使用Gradle并希望测试Kotlin代码,只需将其添加到项目的依赖项中:
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'
}https://stackoverflow.com/questions/40979402
复制相似问题