我试图通过我的junit测试,但继续得到错误nullpointerexception

时间:2015-03-31 14:58:24

标签: java testing netbeans junit

  

错误:StoryTests.testSaveToDB上的java.lang.NullPointerException(StoryTests.java:57)

我不确定错误是什么,但确实需要我的测试通过,如果有人有任何想法请告诉我。

public class StoryTests {

    public StoryTests() {
    }

    ITmagazineSystem testStory;

    /**
     *
     */
    @BeforeClass
    public static void setUpClass() {
        ITmagazineSystem testStory = new ITmagazineSystem();
    }

    @AfterClass
    public static void tearDownClass() {
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }

    @Test
    public void testSaveToDB() {
        String title = "";
        String StoryID = "s200";
        String StoryTitle = "ASE";
        String StoryType = "Computing";
        String StoryContent = "aaaa";
        testStory.saveToDB(StoryID, StoryTitle, StoryType, StoryContent);

        try {
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/magazine", "root", ""); // database connection

            Statement stmt = (Statement) con.createStatement();

            //String searchTitle = "Select StoryTitle from stories where StoryTitle = '" + txtstoryTitle.getText();
            String searchTitle = "Select StoryTitle from stories where StoryTitle = '" + StoryTitle + "'";

            ResultSet rs = stmt.executeQuery(searchTitle);
            while (rs.next()) {

                title = rs.getString("StoryTitle");
            }
        }
        catch (Exception e) {
        }
        assertTrue(title.equals(StoryTitle));
    }
}

2 个答案:

答案 0 :(得分:1)

您正在setUpClass方法中初始化局部变量。不会修改具有相同名称的全局变量。此全局变量在测试中使用,但仍为null,并且您将获得NullPointerException。这样做(注意testStory之前的类类型已经消失):

@BeforeClass
public static void setUpClass() {
    testStory = new ITmagazineSystem();
}

此外,您必须使全局变量testStory保持静态,因为setUpClass方法是静态的。您无法访问静态方法中的非静态变量/方法。

另一种选择是将其保持为非静态,并将初始化移至setUp方法,该方法也是非静态的。

答案 1 :(得分:0)

根据您提供的错误,99%的错误位于此处:

testStory.saveToDB(StoryID, StoryTitle, StoryType, StoryContent);

这意味着testStory 当前为空,并且因为您尝试使用它而导致NullPointerException。

为什么它是null是另一个故事。但我相信你知道在哪里检查。

提示:很可能你的@BeforeClass函数没有运行。