Java-验证空字段
我试图验证是否需要一个特定的字段(isbnTextField)。我想确保我首先编写了一个测试,以遵循敏捷开发的原则。但是,在我的testJava-验证空字段,java,swing,junit,Java,Swing,Junit,我试图验证是否需要一个特定的字段(isbnTextField)。我想确保我首先编写了一个测试,以遵循敏捷开发的原则。但是,在我的testtestThatBookNumberIsRequired中,我收到一个空指针异常。为什么找不到这个文本字段 编辑: public class BookOrderingGUI extends JFrame { private JTextField isbnTextField; public static void main(String[] a
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出现是很烦人的,哈哈。如果有人知道在测试过程中防止这种情况发生的方法,请让我知道:-)