如何使用 PowerMockito 捕获构造函数参数

How to capture constructor arguments using PowerMockito

class A {
   public B getB(){
      // somehow get argType1 and argType2
      return new B(argType1, argType2);
   }
}

class B{
   public B(Type1 t1, Type2 t2){
     // something
   }
}

我想测试 A,并验证是否为 argType1argType2 的预期值调用了 B 的构造函数。

我如何使用 PowerMockito 执行此操作?

有没有办法像这样传递 argumentCaptor:

whenNew(B.class).withArguments(argType1Captor, argType2Captor).thenReturn(somemock);

如果这样做,argType1Captor 得到两个值

我这样做解决了

PowerMockito,verifyNew(B.class).withArgument(expectedArgType1, expectedArgType2)

Dhrumil Upadhyaya,您的回答(诚然是唯一提供的)没有解决您提出的问题!我想你可能想做这样的事情:

public class MyTest {
   private ArgType argument;

   @Before
   public void setUp() throws Exception {
       MyClass c = mock(MyClass.class);

       whenNew(MyClass.class).withAnyArguments()
                             .then((Answer<MyClass>) invocationOnMock -> {
                argument = (ArgType) invocationOnMock.getArguments()[0];
                return c;
            } 
        );
    }
}

这不是一个优雅的解决方案,但它会捕获传递给构造函数的参数。与您的解决方案相比的优势在于,如果参数是 DTO,那么您可以检查它以查看它是否包含您期望的值。