如何使用JUnit操作变量值

时间:2016-05-27 17:46:43

标签: java junit cobertura

我正在使用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());
}

可以测试吗?

提前致谢

0 个答案:

没有答案