JUnit Testet auf GUI in Java

Ich möchte Testfälle für eine GUI schreiben. Ich möchte wissen, wie Sie einen Klick auf JButton simulieren oder wie Sie die Elemente einer JTable extrahieren.

Zu diesem Zweck habe ich eine einfache Benutzeroberfläche erstellt, die die Anzahl um 1 erhöht, wenn auf die Schaltfläche geklickt wird und das JText-Feld leer ist. Die Anzahl wird jedoch durch die Ganzzahl im JText-Feld ersetzt, wenn eine Zahl angegeben wird. Natürlich möchte ich Regex verwenden, um sicherzustellen, dass der in das JText-Feld eingegebene Text tatsächlich eine Ganzzahl ist, aber nehmen wir an, dass Benutzer nicht herumspielen und eine Nicht-Ganzzahl eingeben. Darüber hinaus aktualisiert das JLabel die aktuelle Anzahl, während die JTable eine neue Zeile hinzufügt.

Hier ist der Code:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;


public class sampleGUI extends JFrame implements ActionListener {
    private Integer previous_count;
    private Integer current_count;
    private JButton Button;
    private JTable table;
    private JTextField text;
    private DefaultTableModel model;
    private JScrollPane scroll;
    private JLabel label;

    public sampleGUI() {
        previous_count = null;
        current_count = 0;
        JFrame frame = new JFrame("Sample");
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        label = new JLabel("Current Count: " + Integer.toString(current_count));
        text = new JTextField(15);
        Button = new JButton("Change the Count!");
        model = new DefaultTableModel();
        model.addColumn("Previous Count");
        model.addColumn("Current Count");
        table = new JTable(model);
        scroll = new JScrollPane(table);

        layout.setHorizontalGroup(layout
                .createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(
                        layout.createSequentialGroup().addComponent(label)
                                .addComponent(text).addComponent(Button))

                .addComponent(scroll));

        layout.setVerticalGroup(layout
                .createSequentialGroup()
                .addGroup(
                        layout.createParallelGroup(
                                GroupLayout.Alignment.BASELINE)
                                .addComponent(label).addComponent(text)
                                .addComponent(Button)).addComponent(scroll));
        Button.addActionListener(this);

        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == Button) {
            if (text.getText().equals("")) {
                previous_count = current_count;
                current_count++;
                label.setText("Current Count: "
                        + Integer.toString(current_count));
                model.addRow(new Object[] { current_count, previous_count });
            } else {
                previous_count = current_count;
                current_count = Integer.parseInt(text.getText());
                label.setText("Current Count: "
                        + Integer.toString(current_count));
                text.setText("");
                model.addRow(new Object[] { current_count, previous_count });
            }
            table.changeSelection(table.getRowCount() - 1, 0, false,
                    false);
        }
    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                sampleGUI gui = new sampleGUI();
            }
        });
    }
}

Angenommen, ich möchte das Öffnen der GUI simulieren, dann einmal auf die Schaltfläche klicken, ohne Text einzugeben, dann 1234 eingeben und auf die Schaltfläche klicken, dann auf die Schaltfläche klicken, ohne Text einzugeben. Die JTable sollte 3 Spalten haben: {{1,0 }, {1234, 1}, {1235, 1234}}. Wie kann ich den Test dazu schreiben? Vielen Dank!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage