返回
如何在方法中验证创建的对象的方法调用?
java
2024-03-02 12:05:01
## 验证在方法内部创建的对象中的方法调用
场景
在测试中,你可能需要验证在一个方法内部创建的对象中的方法是否被调用。例如,你有一个 Foo
类,它在 foo
方法中创建了一个 Bar
对象并调用 someMethod
方法。你要验证在调用 foo
之后,someMethod
被调用了一次。
解决方法
使用 Mockito,你可以通过以下步骤验证这一行为:
1. 创建 Foo 类模拟对象
Foo foo = Mockito.mock(Foo.class);
2. 捕获内部创建的对象
使用 ArgumentCaptor
来捕获内部创建的对象:
ArgumentCaptor<Bar> barCaptor = ArgumentCaptor.forClass(Bar.class);
3. 验证 Foo 方法
验证 foo
方法被调用了一次:
Mockito.verify(foo, times(1)).foo();
4. 验证内部对象的方法
从 barCaptor
中获取内部对象,然后对其进行验证:
Bar bar = barCaptor.getValue();
Mockito.verify(bar, times(1)).someMethod();
代码示例
完整的测试代码如下:
@Test
public void testVerifyMethodCalledOnObjectCreatedWithinMethod() {
Foo foo = Mockito.mock(Foo.class);
ArgumentCaptor<Bar> barCaptor = ArgumentCaptor.forClass(Bar.class);
Mockito.verify(foo, times(1)).foo();
Bar bar = barCaptor.getValue();
Mockito.verify(bar, times(1)).someMethod();
}
常见问题解答
Q:我必须捕获内部创建的对象吗?
A:是的,你需要使用 ArgumentCaptor
来捕获对象,以便对其方法进行验证。
Q:我可以验证多个内部对象的方法吗?
A:是的,你可以使用多个 ArgumentCaptor
来捕获和验证多个内部对象。
Q:我可以在方法内验证多个方法调用吗?
A:是的,你可以使用 verify
方法并指定调用次数来验证多个方法调用。
Q:我可以用其他框架来验证这种行为吗?
A:是的,还有其他框架可以用来验证这种行为,如 JMockit 和 PowerMock。
Q:这种方法适用于所有对象创建场景吗?
A:不,这种方法仅适用于在方法内部创建的对象。对于在类构造函数或静态方法中创建的对象,需要使用其他技术来进行验证。