如何为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));
}
}
答案 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的情况。