2013-12-24 33 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; 
相关问题