我正在尝试使用Mockito在类中测试此方法:
该方法的第一种情况是当字符串等于常量时。
该方法的第二种情况是当字符串等于除了常量之外的其他任何内容。
这是关于anything except a certain integer的问题的字符串版本。
public class Class {
private SomeOtherObjectWithAMethod someOtherObjectWithAMethod;
public Class(SomeOtherObjectWithAMethod someOtherObjectWithAMethod){
this.someOtherObjectWithAMethod = someOtherObjectWithAMethod;
}
public void method(){
if(helperObject.obtainAString().equals(HelperObject.A_STRING_CONSTANT)){
someOtherObjectWithAMethod.thisMethod("stringarg");
}
else{
someOtherObjectWithAMethod.thisMethod("differentarg");
}
}
我知道在Mockito中可以
在null
方法内输入thenReturn()
作为不返回任何内容的方法。
anyString()
作为虚拟字符串。我已经对第一种情况(str.equals("This string"))
进行了单元测试,如下所示:
private Class instantiatedClass;
@Test
public void testMethod_thisString(){
whenever(helperObject.obtainAString()).thenReturn(HelperObject.A_STRING_CONSTANT);
instantiatedClass.method()
verify(someOtherObjectWithAMethod).thisMethod("stringarg");
}
我将编写另一个类似的测试用例方法。我已经在下面注释了需要帮助的部分:
@Test
public void testMethod_notThisString(){
whenever(helperObject.obtainAString()).thenReturn(/* A String that is not HelperObject.A_STRING_CONSTANT */);
instantiatedClass.method()
verify(someOtherObjectWithAMethod).thisMethod("differentarg");
}
如何测试除以外的任何字符串的特定值(或多个值)?
答案 0 :(得分:0)
如果creating random strings
不等于特定值,则可以使用它们。
答案 1 :(得分:0)
您可以执行Mockito.doAnswer( answer )
,以更好地控制创建的String
类似这样:
List<String> blacklist = Arrays.asList("aaaa","bbbb");
Mockito.doAnswer((i)-> {
String x=RandomStringUtils.random(4);
while(blacklist.contains(x)){
x=RandomStringUtils.random(4);
}
return x;
}).when(helperObject).obtainAsString();
答案 2 :(得分:0)
虽然我不知道“除某些字符串外的任何字符串”的处理方式,但这解决了我的问题:
@Test
public void testMethod_notThisString(){
whenever(helperObject.obtainAString()).thenReturn(HelperObject.CONSTANT1, HelperObject.CONSTANT2, HelperObject.CONSTANT3);
instantiatedClass.method()
verify(someOtherObjectWithAMethod).thisMethod("differentarg");
}
这遵循Overriding Stubbing的逻辑。