java - Mockito 和 PowerMockito 错误

标签 java junit mocking mockito powermockito

以下代码适用于 PowerMockito 版本 1.7.3 和 Mockito 版本 2.9.0

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({FileUtils.class, Paths.class, Files.class})
public class FileUtilsTest {

    @Test
    public void testGetFileContents_Success() throws Exception {
        String filePath = "c:\\temp\\file.txt";

        Path mockPath = PowerMockito.mock(Path.class);
        PowerMockito.mockStatic(Paths.class);
        PowerMockito.mockStatic(Files.class);

        Mockito.when(Paths.get(Mockito.anyString())).thenReturn(mockPath);
        Mockito.when(Files.readAllBytes(Mockito.isA(Path.class))).thenReturn("hello".getBytes());

        String fileContents = FileUtils.getFileContents(filePath);
        assertNotNull(fileContents);
        assertTrue(fileContents.length() > 0);

        PowerMockito.verifyStatic(Paths.class);
        Paths.get(Mockito.anyString());
        PowerMockito.verifyStatic(Files.class);
        Files.readAllBytes(Mockito.isA(Path.class));
    }

}

但是 - 当我转到以下版本时 - PowerMockito 版本 2.0.0-beta.5 和 Mockito 版本 2.12.0 - 我收到以下错误

    org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class java.nio.file.Paths
Mockito cannot mock/spy because :
 - final class

有什么想法可能导致此问题或我需要更改什么吗?

谢谢 达米恩

最佳答案

我认为您必须降级/推迟升级到 PowerMock v2.x。

参见PowerMockito not compatible Mockito2 since their v2.0.55-beta release .

所有 PowerMock v2.x/Mockito v2.x 集成工作都包含在这两个问题中:

看起来目标是在 PowerMock v2.0.0(以及某些 Mockito 2.x 版本)中运行此功能,但没有明确说明何时可用。

关于java - Mockito 和 PowerMockito 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47240116/

相关文章:

java - 我如何在 @Step 注释的 mtd 之前和之后调用我的方法?

java - 根据生产或测试环境在 Eclipse 中使用不同的 JPA.persistence.xml

c# - 没有注入(inject)的模拟

java - 具有聚合/组合的 Spring Framework JDBC DAO

Java:(int) double 可靠吗?

java - 如何证明Restful Web service是一个web服务?

.net - 我怎样才能模拟大会?

java - 如何在具有工厂方法的 spring MVC Controller 中进行集成测试?

java - 如何在不使用静态 @BeforeClass 的情况下设置/拆卸 dbunit 数据集

javascript - 无法让 Jest 模拟正常工作