Mockito 和 PowerMockito 错误
Mockito and PowerMockito Error
以下代码适用于 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:https://github.com/powermock/powermock/issues/726
- Mockito:https://github.com/mockito/mockito/issues/1110
看起来目标是让它在 PowerMock v2.0.0(和一些 Mockito 2.x 版本)中工作,但没有明确说明何时将可用。
以下代码适用于 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:https://github.com/powermock/powermock/issues/726
- Mockito:https://github.com/mockito/mockito/issues/1110
看起来目标是让它在 PowerMock v2.0.0(和一些 Mockito 2.x 版本)中工作,但没有明确说明何时将可用。