gpt4 book ai didi

java - 使用 PowerMockito 无法通过静态成员调用模拟

转载 作者:行者123 更新时间:2023-12-02 06:15:00 26 4
gpt4 key购买 nike

我正在尝试模拟一个包含 2 个静态成员 A、B 和一个静态方法 Utils.SomeMethod 的 Impl。我最初尝试混合 PowerMock 和 Mockito,但不确定这是否导致问题,因此我将所有引用更改为 PowerMockito。我得到单元测试失败,模拟没有被调用。如果我删除静态并仅使用 Mockito 那么所有测试都会成功。

这是问题的简要概述。

class Impl {

static A a;

static B b;

private static final String s = Utils.SomeMethod();

void mainMethod() {

a.aMethod("foo");
b.bMethod("bar");

}

}

所以在我的单元测试中我有

@PowerMockIgnore({"javax.net.ssl.*" , "javax.crypto.*"})
@RunWith(PowerMockRunner.class)
@PrepareForTest({Utils.class})
public class ImplTest {

A a;
B b;
@Captor
ArgumentCaptor<String> argumentCaptor;

@BeforeClass
static public void setUp() {
PowerMockito.mockStatic(Utils.class);
PowerMockito.when(Utils.SomeMethod()).thenReturn("test"); // works
}

@Before
public void before() {
a = PowerMockito.mock(A.class);
b = PowerMockito.mock(B.class);
impl = PowerMockito.mock(Impl.class);
impl.setA(a); // I tried @Mock and @InjectMocks but seemed to not work on statics, works with non static members
impl.setB(b);
}

@Test
public void test() {
PowerMockito.when(a
.aMethod(any(String.class))
.thenReturn("hmm");

PowerMockito.when(b.bMethod(any(String.class))
.thenReturn("yo");

impl.mainMethod();

verify(a, times(1)).aMethod(argumentCaptor.capture());
// fails that 0 times mock was invoked
}

}

最佳答案

正如我所见,您正在 mock Impl 但如果您希望 mainMethod 调用您的静态方法,则应该实例化它。另外,您是否在代码中的某处初始化 argumentCaptor ?

关于java - 使用 PowerMockito 无法通过静态成员调用模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55877494/

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