如何使用 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
,并验证是否为 argType1
和 argType2
的预期值调用了 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,那么您可以检查它以查看它是否包含您期望的值。
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
,并验证是否为 argType1
和 argType2
的预期值调用了 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,那么您可以检查它以查看它是否包含您期望的值。