gpt4 book ai didi

java - 使用 PowerMockito 模拟 Java 中其他类的静态函数

转载 作者:行者123 更新时间:2023-12-02 11:37:13 25 4
gpt4 key购买 nike

我已经编写了测试用例,用于测试 Main 类中的函数,称为 functionMain()。我见过有人使用 PowerMockito 来测试正在测试的 Main 类中的静态函数。

但就我而言,functionMain() 使用的是另一个名为 Branch 的类的静态函数,名为 staticBranchFunction()

我想在 Main 类的测试中模拟 staticBranchFunction()

这个主函数实际上调用了来自不同类Branch1Branch2等的静态函数。

请帮忙。

最佳答案

import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.verifyStatic;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Boom.class})
public class DocTest {

public String boomWrapper() {
return Boom.detonate();
}

@Test
public void testBoom() {
mockStatic(Boom.class);
when(Boom.detonate()).thenReturn("defused");
String actual = boomWrapper();
verifyStatic(Boom.class, times(1));
Boom.detonate();
assertEquals("defused", actual);
}
}

class Boom {
private static final String BOOM = "Boom!";
public static String detonate() {
return BOOM;
}
}

依赖关系:

junit:junit:4.12  
org.mockito:mockito-core:2.13.0
org.powermock:powermock-module-junit4:2.0.0-beta.5
org.powermock:powermock-api-mockito2:2.0.0-beta.5

描述:

更多支持版本请阅读:Mockito + PowerMock , other supported frameworks要求:

  • 列出 @PrepareForTest({Boom.class}) 中的所有静态类用逗号分隔。
  • 通过 PowerMockito.mockStatic(Boom.class) 模拟所有静态类用逗号分隔。
  • 使用常规的mockito方法来设置您的期望,例如Mockito.when(Boom.detonate()).thenReturn("defused")
  • 通过 PowerMockito.verifyStatic(Boom.class, Mockito.times(1)); Boom.detonate(); 验证行为重要提示:您需要调用PowerMockito.verifyStatic(Boom.class)每个方法验证。

有关 PowerMock wiki 的更多详细信息.

关于java - 使用 PowerMockito 模拟 Java 中其他类的静态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com