我正在使用JUnit
测试方法,我面临着一个令人困惑的情况。此测试的主要目的是使用Cobertura
增强分支覆盖率。我传递了String
类型的参数,该参数已添加到DataSet
中。如果在Map
上找不到密钥,则该方法只返回null
,我将其视为负面情景。
令人困惑的是
if( o != null && o.getClass() == String.class )
因此,如果密钥在那里,它将填入o
但是如何使o == null
覆盖分支覆盖范围。如果key = null
则永远不会进入if block
。
待测方法
public String getValueAsString( String key ) {
if( this.values.containsKey( key ) ) {
Object o = this.values.get( key );
if( o != null && o.getClass() == String.class ) {
String s = (String)o;
if( s != null && !"".equals( s ) && !StringConstants.NULL_STRING.equals(s) ) {
return s.trim();
}
} else if( o != null && ( o.getClass() == Calendar.class || o.getClass() == GregorianCalendar.class ) ) {
Calendar c = (Calendar)o;
return DateUtil.getDateAsString( c.getTimeInMillis() );
} else if( o != null && ( o.getClass() == int.class || o.getClass() == Integer.class ||
o.getClass() == short.class || o.getClass() == Short.class || o.getClass() == Float.class ) ) {
return String.valueOf( o );
}
}
return null;
}
JUnit测试
@Test
public void testGetValueAsStringNegativeScenario() throws Exception {
String key1 = "Java Key";
String key2 = ".NET Key";
DataSet dataSet = new DataSet();
dataSet.setType("JUnit Key");
dataSet.addValueToDataSet(key2, "Java value");
String answer = dataSet.getValueAsString(key1);
assertNull(answer);
assertSame("Java value", dataSet.getValueAsString(key2));
assertEquals("JUnit Key", dataSet.getType());
}
可以测试吗?
提前致谢