Java 使用powermockito模拟静态方法
我正在测试一些遗留代码,并希望模拟对静态记录器方法的任何调用:Java 使用powermockito模拟静态方法,java,unit-testing,mockito,powermockito,Java,Unit Testing,Mockito,Powermockito,我正在测试一些遗留代码,并希望模拟对静态记录器方法的任何调用:LoggerFact.getLogger(Class,String MethodName),下面是我尝试的: @RunWith(PowerMockRunner.class) @PrepareForTest({LoggerFact.class, MyClass.class, Logger.class}) public class MyClassTest { @Before public void prepare() th
LoggerFact.getLogger(Class,String MethodName)
,下面是我尝试的:
@RunWith(PowerMockRunner.class)
@PrepareForTest({LoggerFact.class, MyClass.class, Logger.class})
public class MyClassTest
{
@Before
public void prepare() throws Exception
{
Logger mockedLogger = Mockito.mock(Logger.class);
PowerMockito.mockStatic(LoggerFact.class);
PowerMockito.when(LoggerFact.getLogger(MyClass.class, "test"))
.thenReturn(mockedLogger);
}
//My tests
}
我正在测试的类:
public class MyClass
{
public String methodToBeTested()
{
Logger logger = LoggerFact.getLogger(this.getClass(), "test");
logger.info("This is a test");
//some logic
return "SUCCESS";
}
}
但是,当我从prepare when()执行此操作时,我收到了此错误:
我错过什么了吗?我查阅了很多关于这个问题的老帖子,但没有一篇对我有用。工作示例。使用JDK 8和JDK 11进行测试
以下内容适合我。(我发现初始化的顺序非常关键):
根据要求,从上面示例链接中的build.gradle
中,以下是库的版本:
dependencies {
testImplementation 'junit:junit:4.13.1'
testImplementation 'org.mockito:mockito-core:3.6.0'
testImplementation 'org.powermock:powermock-api-mockito2:2.0.7'
testImplementation 'org.powermock:powermock-module-junit4:2.0.7'
}
我添加了在线示例中使用的jar版本。我建议下载这个例子,看看它是否适合你,作为一种精神检查。
@RunWith(PowerMockRunner.class)
@PrepareForTest(LoggerFact.class)
public class MyClassTestCase {
private MyClass myClass = null;
@Before
public void setUp() {
PowerMockito.mockStatic(LoggerFact.class);
}
@Test
public void testMethodToBeTested() {
Logger mockLogger = Mockito.mock(Logger.class);
PowerMockito.when(LoggerFact.getLogger(eq(MyClass.class),eq("test"))).thenReturn(mockLogger);
myClass = new MyClass();
// test
myClass.methodToBeTested();
verify(mockLogger, times(1)).info(eq("This is a test"));
}
}
dependencies {
testImplementation 'junit:junit:4.13.1'
testImplementation 'org.mockito:mockito-core:3.6.0'
testImplementation 'org.powermock:powermock-api-mockito2:2.0.7'
testImplementation 'org.powermock:powermock-module-junit4:2.0.7'
}