这个junit测试用例有什么问题?

时间:2014-03-19 21:36:48

标签: java junit

我正在尝试在我的应用程序中使用jUnit设置测试。这是我第一次这样做的经历。

这是我的测试用例:

public class TestClass 
{
    StudentDAO s= new StudentDAO();
    @Test
    public void testStudentsInQFG() 
    {
         Assert.assertEquals(s.getStudentCountFromDB("1"),10);
    }
}

以下是学生DAO方法:

public int getStudentCountFromDB(String CourseID)
{
    String sqlCount="SELECT Count(*) FROM  Student WHERE CourseID=?";
    return this.getMySQLJDBCTemplate().queryForObject(sqlCount,new Object[] {CourseID}, Integer.class);
}

当我从Main方法调用它时,该方法返回正确的结果,但是当我使用assertEquals时失败。这是我的堆栈跟踪:

java.lang.NullPointerException
 at com.omnitracs.fra.dao.StudentDAO.testStudentsInQFG(StudentDAO.java:107)
 at com.omnitracs.fra.junit.TestClass.testStudents(TestClass.java:17)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
 at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
 at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
 at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
 at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
 at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

1 个答案:

答案 0 :(得分:1)

看起来当StudentDao调用你的方法getMySQLJDBCTemplate()时,此方法返回null(或直接抛出异常,因为它试图访问以访问尚未初始化的变量)。

您可能需要在DAO中调用setMySQLJDBCTemplate(jdbcTemplate)这样的方法,并使用正确初始化的jdbcTemplate或Mock(您可以查看Mockito库)。在尝试访问数据库之前,您需要先在测试中调用它,以设置mysql模板。您可能需要初始化DAO的其他字段。