2017-11-11 137 views
1

下面的代码工作与PowerMockito 1.7.3版和版本的Mockito 2.9.0和的Mockito错误PowerMockito

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 

任何想法可能会造成这个问题或者我需要改变什么?

谢谢 达米安

回答

1

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

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

所有PowerMock版本2.x/V2.X的Mockito整合工作是由这两个问题涉及:

看起来像目标是让它在PowerMock v2.0.0(和一些Mockito 2.x版本)中运行,但没有明确说明何时可用。

+0

完美 - 谢谢@glytghing – Damien

相关问题