2015-03-31 7 views
-1

error: java.lang.NullPointerException at StoryTests.testSaveToDB(StoryTests.java:57)Я пытаюсь передать свой тест junit, но продолжаю получать ошибку nullpointerexception

Я не уверен, что это за ошибка, но мне нужно пройти тест, если у кого есть какие-либо идеи, пожалуйста, дайте мне знать.

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

Возможный дубликат [Что такое Исключение нулевого указателя и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how -do-i-fix-it) –

+0

все еще не в состоянии понять :( – Ruf

+0

@ Ruf: если вы все еще не узнаете, мы не можем подсчитать номер строки в вашем коде, отправленном, чтобы найти строку 57. По крайней мере, пожалуйста, дайте точная строка проблемы –

ответ

1

Вы инициализируете локальную переменную в методе setUpClass. Глобальная переменная с таким же именем не будет изменена. Эта глобальная переменная используется в тесте, но все равно будет равна null, и вы получите исключение NullPointerException. Сделайте это вместо того, чтобы (обратите внимание, что тип класса, прежде чем testStory ушел):

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

Кроме того, вы должны сделать глобальную переменную testStory статическими, так как метод setUpClass является статическим. Вы не можете получить доступ к нестационарным переменным/методам в статических методах.

Другой вариант - оставить его нестатическим и перенести инициализацию в метод setUp, который также нестационар.

+0

извините, я не очень хорошо понимаю я. ранее не использовал BeforeClass, но я читал, что единственная разница между BeforeClass и Before заключается в том, что BeforeClass будет запускаться только один раз перед всеми тестами, а перед повторным запуском каждый раз. Я не понимаю, почему нам нужно сделать testStory static? –

+1

Вы правы со своим комментарием к BeforeClass и Before. Я обновил свой ответ, чтобы лучше выяснить, почему сделать testStory статичным. – eee

+0

Не могу поверить, что я пропустил тот факт, что OP объявила новую локальную переменную: |.Вы правы, это объясняет, почему testStory имеет значение null –

0

От ошибки вы предоставляете, 99%, что ошибка лежит здесь:

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

Это означает, что testStory в настоящее время нулевой и вызывает NullPointerException, потому что вы пытаетесь использовать его.

Почему это null - это еще одна история. Но я уверен, что вы знаете, где проверить.

Подсказка: очень вероятно, что ваша функция @BeforeClass не запускалась.

Смежные вопросы