ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Mockito – 验证具有不同参数的多个方法调用 > 原文: [https://howtodoinjava.com/mockito/verify-multiple-method-arguments/](https://howtodoinjava.com/mockito/verify-multiple-method-arguments/) 学习编写[单元测试](https://howtodoinjava.com/mockito/junit-mockito-example/),该单元测试使用不同的参数多次调用一个方法,然后分别验证方法调用和方法参数。 ## 1\. 验证具有不同参数的多个方法调用 给定的单元测试模拟了[`HashMap`](https://howtodoinjava.com/java-hashmap/)类,并在`put(key, value)`代码中调用了两次。 然后,它验证该方法已被调用两次。 该测试进一步分别验证所有不同的方法参数。 ```java import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.times; import java.util.Arrays; import java.util.HashMap; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class MockitoExample { @Mock HashMap<String, Integer> hashMap; @Captor ArgumentCaptor<String> keyCaptor; @Captor ArgumentCaptor<Integer> valueCaptor; @Test public void saveTest() { hashMap.put("A", 10); hashMap.put("B", 20); //1\. Verify method was invoked N times Mockito.verify(hashMap, times(2)).put(keyCaptor.capture(), valueCaptor.capture()); List<String> keys = keyCaptor.getAllValues(); List<Integer> values = valueCaptor.getAllValues(); //2\. Verify method argument values as list assertEquals(Arrays.asList("A", "B"), keys); assertEquals(Arrays.asList(Integer.valueOf(10), Integer.valueOf(20)), values); //3\. Verify method arguments separately assertEquals("A", keys.get(0)); assertEquals("B", keys.get(1)); assertEquals(Integer.valueOf(10), values.get(0)); assertEquals(Integer.valueOf(20), values.get(1)); } } ``` ## 2\. 解释 为了捕获并验证多次调用某个方法时传递给该方法的所有方法参数,我们将遵循以下步骤: * 使用`Mockito.verify(mock, times(n))`验证方法是否已执行`'n'`次。 * 创建与方法中的参数数量一样多的`ArgumentCaptor`实例。 在上面的示例中,我们测试了适用于键值对的`HashMap`,因此我们创建了两个`ArgumentCaptor`实例–一个用于键,另一个用于值。 * 使用`ArgumentCaptor.getAllValues()`检索所有执行期间传递给一个方法参数的所有值。 它返回传递的参数值的`List`。 * 我们可以使用`assertEquals(expected, result)`来验证预期的多个参数是否与`ArgumentCaptor`的检索值匹配。 将有关多次调用方法的问题交给我,并在基于模拟的单元测试中验证其方法**不同的参数**值。 学习愉快!