2013-12-24 77 views
0

嘗試使用Powermock模擬SystemTray上的靜態方法。不知道爲什麼這不起作用。我檢查過Powermock - > Mockito版本的匹配,我想我已經按照所有步驟添加了正確的註釋,並使用正確的PowerMock方法來設置靜態的。Powermock + Mockito不工作

SystemTray上的靜態方法似乎在沒有由when()設置的存根功能的情況下被調用。

我在這裏混合Powermock和Mockito調用,但根據文檔是正確的。

package CommissionChecker; 

import org.apache.commons.logging.Log; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.Mock; 
import org.mockito.Mockito; 
import org.mockito.runners.MockitoJUnitRunner; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 
import org.springframework.test.util.ReflectionTestUtils; 

import java.awt.*; 
import java.io.IOException; 
import java.util.List; 

import static org.mockito.Mockito.*; 
import static org.powermock.api.mockito.PowerMockito.mockStatic; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest(SystemTray.class) 
public class DisplayManagerTest { 

    @Mock 
    Log logMock; 
    @Mock 
    Runner runnerMock; 

    @Test 
    public void display_manager_does_nothing_if_system_tray_is_not_supported() throws IOException, AWTException { 
     mockStatic(SystemTray.class); 
     when(SystemTray.isSupported()).thenReturn(false); 

     new DisplayManager(runnerMock); 

     verifyZeroInteractions(runnerMock); 
    } 
} 

這些都是我的Maven依賴

<powermock.version>1.5.2</powermock.version> 
    <dependency> 
     <groupId>org.mockito</groupId> 
     <artifactId>mockito-all</artifactId> 
     <version>1.9.5</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

回答

-1

下面是使用PowerMock一個簡單的例子:

package test; 

import static org.easymock.EasyMock.expect; 
import static org.easymock.EasyMock.replay; 
import static org.easymock.EasyMock.verify; 
import static org.testng.Assert.*; 

import org.junit.runner.RunWith; 
import org.powermock.api.easymock.PowerMock; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 
import org.testng.IObjectFactory; 
import org.testng.annotations.ObjectFactory; 
import org.testng.annotations.Test; 

import demo.powermock.IdGenerator; 
import demo.powermock.ServiceRegistartor; 
//import org.easymock.classextension 
@RunWith(PowerMockRunner.class) 
@PrepareForTest(IdGenerator.class) 
public class Test111 { 
    @ObjectFactory 
    public IObjectFactory getObjectFactory() { 
     return new org.powermock.modules.testng.PowerMockObjectFactory(); 
    } 

    @Test 
    //@org.testng.annotations.Test 
    public void testRegisterService() throws Exception { 
     long expectedId = 42; 

     // We create a new instance of test class under test as usually. 
     ServiceRegistartor tested = new ServiceRegistartor(); 

     // This is the way to tell PowerMock to mock all static methods of a 
     // given class 
     PowerMock.mockStatic(IdGenerator.class); 

     /* 
     * The static method call to IdGenerator.generateNewId() expectation. 
     * This is why we need PowerMock. 
     */ 
     expect(IdGenerator.generateNewId()).andReturn(expectedId); 

     // Note how we replay the class, not the instance! 
     PowerMock.replay(IdGenerator.class); 

     long actualId = new ServiceRegistartor().registerService(); 

     // Note how we verify the class, not the instance! 
     PowerMock.verify(IdGenerator.class); 

     // Assert that the ID is correct 
     assertEquals(expectedId, actualId); 
    } 
} 
+0

上面的例子是一個非常簡單的使用,你只是沒有複製粘貼,你爲什麼不把 – user4308864

+0

花花公子一段時間並解釋一下。 –

-1

我有同樣的問題,但我增加了進口手動問題就消失了。

import org.powermock.modules.junit4.PowerMockRunner; 
相關問題