Java-验证空字段

Java-验证空字段,java,swing,junit,Java,Swing,Junit,我试图验证是否需要一个特定的字段(isbnTextField)。我想确保我首先编写了一个测试,以遵循敏捷开发的原则。但是,在我的testtestThatBookNumberIsRequired中,我收到一个空指针异常。为什么找不到这个文本字段 编辑: public class BookOrderingGUI extends JFrame { private JTextField isbnTextField; public static void main(String[] a

我试图验证是否需要一个特定的字段(isbnTextField)。我想确保我首先编写了一个测试,以遵循敏捷开发的原则。但是,在我的test
testThatBookNumberIsRequired
中,我收到一个空指针异常。为什么找不到这个文本字段

编辑:

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());
    }
}

对于任何感兴趣的人,我最终编写了一个getter方法来针对特定的字段和按钮。由于有一个操作绑定到此按钮,因此我使用
doClick()
模拟用户单击。我还制作了一个inital标志来确定字段何时无效的状态。结果是这样的:

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

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

    assertFalse(this.window.isValid);
}

我只是将文本字段包设置为私有,并直接从测试中访问它。这更容易,也不容易出错。如果这以后会产生问题(为什么会这样?),您可以选择复杂的选项。因此,您的意思是使
target
私有化,类似于我的
window
?我仍然得到一个空指针异常@assylias我已经添加了一些代码@assylias,我想这可能是处理字段存储在其中的窗格的。我的意思是:(I)在
BookOrderingGUI
中,将字段包设为私有(即删除私有,只需使用:
JTextField isbnTextField;
)和(ii)在测试中,只需使用
JTextField target=window.isbnTextField。好的,我已经做了更改,但我仍然得到那个例外@当验证运行时,想看到JOptionPane出现是很烦人的,哈哈。如果有人知道在测试过程中防止这种情况发生的方法,请让我知道:-)