对空对象,字符串,布尔等进行JUnit测试

时间:2014-04-11 19:36:57

标签: java junit

如何为null对象实现JUnit测试?它不需要测试空对象,但是字符串等也是可以接受的。看过以下链接,但我仍然没有得到它。

如果给出以下方法,我该怎么做,特别是&好吗?

public int queryTime(String examSession){ //returns time of specific the exam session
    int i;
    for (i=0; i<es.size();i++){
        if (es.get(i).getid().equals(examSession)) //if id matches, return time
            return es.get(i).getTimeOfExam();
    }
    return -1;
}

我有以下测试用例:

public class JTest1 
{
    private entity.Module mod;
    private String input = null;

@Test
public void test()
{
    //test null obj
    assertNull (mod.queryTime(input));      
}   

}

1 个答案:

答案 0 :(得分:0)

在这里,您需要单元测试queryTime()方法。 我不确定你要测试什么,因为queryTime()永远不会返回null 您需要测试两种情况,因为有两种可能的返回值(其中没有一种是null

所以,如果我要写这些测试,我会写

@Test
public shoudReturnQueryTimeGivenValidExamSession(){
    Module mod = new Module() ; 
    String input = "some_string";
    Integer result = 1;//Some integer

    // Set the expectations
    Object object = Mock(Object.class) ; // This should be class(in place of object) of type es
    Object object1 = Mock(Object.class) ; // This should be class of what es.get(1) returns. I assume es is a list of somethings and es.get(1) returns an object of your custom class. So In prev line, Object -> ArrayList, this line Object -> YourCustomObject
    when(object.get(1)).thenReturn(object1); 
    when(object1.getid()).thenReturn(input);
    when(object1.getTimeOfExam()).thenReturn(result);

    //Make the call
   Integer actualResult = mod.queryTime(input);

    //Verify
   assertEquals(result, actualResult);
}

类似地,您需要测试另一个输出为-1的情况。