在规则中使用Mockito的anyString()并不能正常使用" normal"其他规则中的值

时间:2014-03-12 12:32:31

标签: mockito

我有这个问题,我希望我的模拟在某些特定情况下返回特定值,在任何其他情况下返回另一个值,在下面的代码中由anyString()表示。

@Test
public void testMockitoWithAny() {
    // Mock the object
    List<String> list = mock(List.class);

    // populate the mock with the rules
    when(list.add("abc")).thenReturn(false);      // first rule
    when(list.add(anyString())).thenReturn(true); // default rule

    // Verify the rules.
    assertTrue(list.add("xyz"));                  // Ok
    assertFalse(list.add("abc"));                 // AssertionError.
}

如何与Mockito发表这样的声明?

2 个答案:

答案 0 :(得分:1)

好的,我找到了答案。我只需要切换规则,先设置默认规则。

@Test
public void testMockitoWithAny() {
    // Mock the object
    List<String> list = mock(List.class);

    // populate the mock with the rules
    when(list.add(anyString())).thenReturn(true); // default rule
    when(list.add("abc")).thenReturn(false);      // first rule

    // Verify the rules.
    assertTrue(list.add("xyz"));                  // Ok
    assertFalse(list.add("abc"));                 // Ok
}

答案 1 :(得分:0)

你需要一个匹配任何字符串的匹配器,除了&#34; abc&#34;:

import static org.hamcrest.CoreMatchers.*;
...

when(list.add(argThat(not(equalTo("abc"))))).thenReturn(true); // default rule