gpt4 book ai didi

java - Powermock verifyPrivate 不能与 any() 一起使用

转载 作者:行者123 更新时间:2023-12-02 09:31:05 30 4
gpt4 key购买 nike

我有一个私有(private)方法,我想测试其调用而不关心参数。我想测试它是否被调用。

MyClass.java

public void doStuff(){
unload(args);
}

private void unload(List<String> args) {
//
}

所以我使用了以下内容:

MyClasstest.java

MyClass myClass = PowerMockito.spy(new MyClass());
myClass.doStuff();
verifyPrivate(myClass, times(1)).invoke("unload",any(List.class));
// verifyPrivate(myClass, times(1)).invoke("unload",any()); //same result with this

此测试因以下异常而失败:

Wanted but not invoked com.MyClass.unload( null );

However, there were other interactions with this mock ....... (actual values with which it was called)

是否可以仅使用实际参数而不使用 any() 来调用 verifyPrivate?

最佳答案

这是您正在尝试执行的操作的示例:

您可能只是缺少 @PrepareForTest 注释,它必须指向正确的类。如果您的类是外部类,请使用@PrepareForTest(MyClass.class),下面的示例将显示它与内部类。

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyClassTest.class)
public class MyClassTest {

static class MyClass {

public void doStuff(){
unload(null);
}

private void unload(List<String> args) {
}
}

@Test
public void test() throws Exception {
MyClass myClass = PowerMockito.spy(new MyClass());
myClass.doStuff();
PowerMockito.verifyPrivate(myClass, Mockito.times(1)).invoke("unload", Mockito.any());
}
}
<小时/>

请注意,您应该考虑是否真的想在单元测试中执行此操作。通常,您的 UnitTest 不应该关心是否使用私有(private)方法,它应该专注于验证是否返回了正确的结果或是否达到了正确的对象状态。

通过向其中添加有关类内部行为的知识,您的测试与实现紧密耦合,这可能不是一件好事。

关于java - Powermock verifyPrivate 不能与 any() 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57971100/

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