尝试使用Powermock在SystemTray上模拟静态方法。不知道为什么这不起作用。我检查了Powermock的比赛 - > Mockito版本,我想我已经按照所有步骤添加正确的注释,并使用正确的PowerMock方法来设置静态注释。
在没有由when()设置的存根功能的情况下,似乎调用了SystemTray上的静态方法。
我在这里混合使用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>
答案 0 :(得分:1)
只需更改此行
@RunWith(PowerMockRunner.class)
到
@RunWith(DisplayManager.class)
答案 1 :(得分:-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);
}
}
答案 2 :(得分:-1)
我遇到了同样的问题,但是我手动添加了导入,问题就消失了。
import org.powermock.modules.junit4.PowerMockRunner;