Chu*_*urk 45 java junit matcher mockito
我正在尝试为通话创建一个模拟器.说我有这个方法我试图存根:
class ClassA {
public String getString(String a) {
return a + "hey";
}
}
Run Code Online (Sandbox Code Playgroud)
我想嘲笑的是:第一个例子是
when(classA.getString(eq("a")).thenReturn(...);`
Run Code Online (Sandbox Code Playgroud)
在同一测试案例中
when(classA.getString([anything that is not a])).thenReturn(somethingelse);
Run Code Online (Sandbox Code Playgroud)
第二个案例是我的问题:我如何匹配anyString()"a"以外的其他?
tro*_*oig 91
使用Mockito框架,您可以使用AdditionalMatchers
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");
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
argThat与Hamcrest一起使用:
when(classA.getString(argThat(CoreMatchers.not(CoreMatchers.equalTo("a")))...
Run Code Online (Sandbox Code Playgroud)
您也可以通过订购来做到这一点.如果你把一个when(anyString)并when(eq("a"))以正确的顺序,应该的Mockito测试他们为了做"一"逻辑在适当的时候再"anyString"逻辑并非如此.
在 mockito 中,最后一个存根是最重要的。这意味着您可以简单地使用标准匹配器来满足您的需求:
// "Default" return values.
when(classA.getString(ArgumentMatchers.anyString())).thenReturn(somethingelse);
// Specific return value for "a"
when(classA.getString(ArgumentMatchers.eq("a"))).thenReturn(something);
Run Code Online (Sandbox Code Playgroud)
请注意,您必须将 ArgumentMatchers 用于两者,因为您正在混合它们。
| 归档时间: |
|
| 查看次数: |
20940 次 |
| 最近记录: |