mockito-使用值列表中的一个值来匹配matcher

时间:2016-04-21 14:22:38

标签: junit mockito matcher

我的方法界面是

Boolean isAuthenticated(String User)

如果从列表中传递函数中的任何用户,我想从值列表中进行比较,然后它应该返回true。

when(authService.isAuthenticated(or(eq("amol84"),eq("arpan"),eq("juhi")))).thenReturn(true);

我正在使用额外的参数匹配器'或'但上面的代码不起作用。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:5)

or没有三参数重载。 (See docs.)如果您的代码已编译,则可能导入的方法与or不同{。}}。

org.mockito.AdditionalMatchers.or应该有用。

您也可以尝试通过isOneOf Hamcrest matcher

访问的argThat Mockito matcher
or(or(eq("amol84"),eq("arpan")),eq("juhi"))

答案 1 :(得分:0)

您可以定义单独的答案:

when(authService.isAuthenticated(eq("amol84"))).thenReturn(true);
when(authService.isAuthenticated(eq("arpan"))).thenReturn(true);
when(authService.isAuthenticated(eq("juhi"))).thenReturn(true);

答案 2 :(得分:0)

对我而言,这有效:

public class MockitoTest {

    Mocked mocked = Mockito.mock(Mocked.class);

    @Test
    public void test() {
        Mockito.when(mocked.doit(AdditionalMatchers.or(eq("1"), eq("2")))).thenReturn(true);

        Assert.assertTrue(mocked.doit("1"));
        Assert.assertTrue(mocked.doit("2"));
        Assert.assertFalse(mocked.doit("3"));
    }
}

interface Mocked {
    boolean doit(String a);
}

检查您是否正确设置了mockito,或者您是否使用了与我相同的匹配器。

答案 3 :(得分:0)

如果您对提取库不感兴趣,则可以遍历要添加到模拟中的所有值:

// some collection of values
List<String> values = Arrays.asList("a", "b", "c");

// iterate the values
for (String value : values) {
  // mock each value individually
  when(authService.isAuthenticated(eq(value))).thenReturn(true)
}