错误: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));
}
}
答案 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函数没有运行。