2014-04-19 75 views
0

我想驗證一個特定字段是必需的(isbnTextField)。我想確保我先寫一個測試來遵循敏捷開發的原則。但是,我在我的測試testThatBookNumberIsRequired中收到空指針異常。爲什麼不找到這個textField?Java - 驗證空字段

編輯:

public class BookOrderingGUI extends JFrame { 

    private JTextField isbnTextField; 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        BookOrderingGUI window = new BookOrderingGUI(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the application. 
    */ 

    public BookOrderingGUI() { 
     initialize(); 
    } 

    public void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 600, 450); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 
     tabbedPane.setBounds(0, 0, 584, 412); 
     frame.getContentPane().add(tabbedPane); 

     JPanel panelOrders = new JPanel(); 
     tabbedPane.addTab("Orders", null, panelOrders, null); 
     panelOrders.setLayout(null); 

     isbnTextField = new JTextField(); 
     isbnTextField.setBounds(80, 8, 86, 20); 
     panelOrders.add(isbnTextField); 
     isbnTextField.setColumns(10); 
    } 
} 

測試

public class TestBookOrdering extends TestCase { 
    private BookOrderingGUI window; 

    @Before 
    public void setUp() { 
     this.window = new BookOrderingGUI(); 
     this.window.setVisible(true); 
    } 

    @Test 
    public void testThatBookNumberIsRequired() { 
     JTextField target = (JTextField) this.window.getComponentAt(80, 8); 
     target.setText(null); 
     target.postActionEvent(); 
     assertFalse(target.getText().isEmpty()); 
    } 
} 
+0

我只是將文本字段包設置爲private,並直接從測試中訪問它。這更容易,也更不容易出錯。如果以後出現問題(爲什麼會這樣?),您總是可以選擇複雜的選項。 – assylias

+0

所以你說讓'''target'''私有類似於我有'''window'''?我仍然得到一個空指針異常。 @assylias – theGrayFox

+0

我添加了一些更多的代碼@assylias我認爲這可能是與處理窗格的字段存儲在。 – theGrayFox

回答

0

的人誰的興趣我最後寫一個getter方法來針對特定領域和按鈕。由於該操作與此按鈕綁定,我然後通過使用doClick()模擬用戶單擊。我也做了一個初始標誌來確定該領域何時失效的狀態。結果如下:

@Test 
public void testThatBookNumberIsRequired() { 
    targetField = this.window.getBookNumber(); 
    targetButton = this.window.getSubmit(); 

    targetField.setText(null); 
    targetButton.doClick(); 

    assertFalse(this.window.isValid); 
} 
+0

當驗證運行時看到一個JOptionPane出現很煩人,哈哈。如果有人知道在測試過程中防止這種情況,請讓我知道:-) – theGrayFox