Java 捕获参数传递到powermockito中的存根

Java 捕获参数传递到powermockito中的存根,java,junit,mockito,powermock,stubbing,Java,Junit,Mockito,Powermock,Stubbing,如何捕获(出于断言目的)传递给静态存根方法调用的参数 这个方法看起来像这样 public class SomeStaticClass{ protected static String methodBeingStubbed(Properties props){ ... 我正在存根方法调用,因为我需要验证它是否被调用 PowerMockito.stub(PowerMockito.method(SomeStaticClass.class, "methodBeingStubbed")).toRetur

如何捕获(出于断言目的)传递给静态存根方法调用的参数

这个方法看起来像这样

public class SomeStaticClass{
protected static String methodBeingStubbed(Properties props){
...
我正在存根方法调用,因为我需要验证它是否被调用

PowerMockito.stub(PowerMockito.method(SomeStaticClass.class, "methodBeingStubbed")).toReturn(null);
PowerMockito.verifyStatic();

但我现在还想知道传递给这个“methodBeingStubbed”的属性是什么,并断言它是预期的

在调用
verifyStatic
之后,您需要实际调用您试图验证的方法,如中所示:

此时,您可以使用Mockito,如下所示(但未经测试):

ArgumentCaptor属性转义器=
ArgumentCaptor.forClass(Properties.class);
verifyStatic(SomeStaticClass.class);
SomeStaticClass.methodBeingStubbed(propertiesscaptor.capture());
Properties PassedValue=PropertiesEscaptor.getValue();

如果您习惯于
@Mock
注释,或者您需要捕获一个泛型(如
列表中的
),您可能也会对使用注释感兴趣。

谢谢Jeff。这里有趣的(有些反直觉的)事情是,与在逻辑测试之前设置mock/stub不同,设置捕获的代码在测试之后进行。请输入完整的代码?我对方法调用的顺序感到困惑。我完全按照原样使用了你的代码,但失败了。它告诉我该方法没有被调用。@Stevers我不太清楚你所说的“完整代码请”是什么意思;在问题中没有完整示例的情况下,您是否要求我编写一个完整的示例设置,然后为示例设置编写一个完整的测试?我不确定我能比已经存在的文档做得更好(我已经更新了链接)。如果你有一个例子是不起作用的,它已经作为一个MCVE存在,这听起来像是一个很好的例子,一个单独的问题,链接到这个问题。
PowerMockito.verifyStatic(Static.class);
Static.thirdStaticMethod(Mockito.anyInt());
ArgumentCaptor<Properties> propertiesCaptor =
    ArgumentCaptor.forClass(Properties.class);

PowerMockito.verifyStatic(SomeStaticClass.class);
SomeStaticClass.methodBeingStubbed(propertiesCaptor.capture());

Properties passedInValue = propertiesCaptor.getValue();