如何编写不等于某物的匹配器

2022-08-31 16:33:44

我正在尝试为呼叫创建一个模拟。假设我有这个方法,我试图存根:

class ClassA {
  public String getString(String a) {
    return a + "hey";
  }
}

我试图模拟的是:第一个实例是

when(classA.getString(eq("a")).thenReturn(...);`

在同一测试用例中

when(classA.getString([anything that is not a])).thenReturn(somethingelse);

第二种情况是我的问题:除了“a”之外,我如何匹配?anyString()


答案 1

通过框架,您可以使用ExtraMatchersMockito

ClassA classA = Mockito.mock(ClassA.class);
Mockito.when(classA.getString(Matchers.eq("a"))).thenReturn("something"); 
Mockito.when(classA.getString(AdditionalMatchers.not(Matchers.eq("a")))).thenReturn("something else");

希望它有帮助。


答案 2

与 Hamcrest 一起使用:argThat

when(classA.getString(argThat(CoreMatchers.not(CoreMatchers.equalTo("a")))...

您也可以通过订购来执行此操作。如果你把一个和正确的顺序,Mockito应该按顺序测试它们,并在适当的时候做“a”逻辑,然后做“anyString”逻辑。when(anyString)when(eq("a"))


推荐