Мне нужно добавить тесты для этой java-программы. Но я не понимаю, для чего можно использовать тесты в такой программе. На самом деле я не вижу никаких преимуществ использования тестов, потому что это не программа вроде определения, является ли число простым или нет.

package utcn;

import javax.swing.*;
import java.sql.*;
import java.awt.event.*;

public class BorrowBook extends JFrame implements ActionListener {
    /**
     * title will be the label for "Enter a book title" message
     */
    JLabel title;
    /**
     * ttitle will be the field for introducing the title
     */
    JTextField ttitle;
    /**
     * btn_borrow is the button for borrowing a book
     */
    JButton btn_borrow;

    /**
     * This method will create a window for borrowing a book.
     */
    public BorrowBook() {
        super("BorrowBook");
        title = new JLabel("Enter a book title:");
        title.setBounds(20, 20, 200, 15);
        ttitle = new JTextField(20);
        ttitle.setBounds(130, 20, 220, 30);
        btn_borrow = new JButton("BorrowBook");
        btn_borrow.setBounds(220, 65, 100, 40);
        btn_borrow.addActionListener(this);
        setVisible(true);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null);
        setSize(500, 150);

        setLayout(null);
        add(btn_borrow);

        add(title);
        add(ttitle);
    }

    /**
     * This method will be called when the button is pressed. The application
     * require for an book title. If the introduced title can be find in the
     * database, it will be displayed a success message, otherwise an error
     * message. Also, in the database, the nr_exempare will be decreased and the
     * nr_imprumuturi will be increased.
     */
    @Override
    public void actionPerformed(ActionEvent ex) {
        Connection conn = null;
        PreparedStatement pst = null;
        PreparedStatement pst1 = null;
        ResultSet rs = null;
        String title = ttitle.getText();
        conn = MySqlConnect.ConnectDB();
        try {
            pst = conn.prepareStatement("update carti set nr_exemplare=nr_exemplare-1 where nume_carte=? ");
            pst1 = conn.prepareStatement("update carti set nr_imprumuturi=nr_imprumuturi+1 where nume_carte=? ");
            pst.setString(1, ttitle.getText());
            pst1.setString(1, ttitle.getText());
            int i = pst.executeUpdate();
            int i1 = pst1.executeUpdate();
            if ((i > 0) && (i1 > 0)) {
                dispose();
                JOptionPane.showMessageDialog(null, "Your book has been borrowed!");
            } else {
                JOptionPane.showMessageDialog(null, "Invalid book title.", "Accse Denied", JOptionPane.ERROR_MESSAGE);

            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }

    }
}

user5642508

Ответов: 2

Ответы (2)

Тесты должны ну проверять вашу логику. Вы не должны думать только о правильных данных. Что происходит, когда пользователь вводит что-то странное?

Или, более того, когда вы продолжаете разрабатывать свой код. Скажем, улучшить его другой функцией. Вы можете убедиться, что старый материал по-прежнему работает с уже написанными тестами.

Или, когда другой разработчик работает над вашим кодом и не прочитал всю вашу замечательную работу (в случае, если код был немного длиннее), он может убедиться, что он ничего не тормозил.

Итак, в вашем конкретном случае я бы рекомендовал проверить, отображается ли правильная ошибка при неправильном вводе. Или что происходит, когда книгу берут дважды? Такие вещи;)

Вам будет очень сложно добавить сюда тесты, так как ваш метод делает все:

  • получение некоторого текстового свойства из пользовательского интерфейса
  • построить соединение с базой данных
  • строить и выполнять запросы
  • оставить отзыв пользователя

Обычно эти операции должны быть разделены между несколькими классами и объектами, отвечающими за их соответствующий набор операций.

В общем, что вы могли и должны проверить здесь, так это то, что операторы обновления были выполнены соответствующим образом и что новые данные являются данными, которые вы ожидаете. Но для того, чтобы правильно это проверить, вам нужно будет намного лучше организовать свой код.

Отделить пользовательский интерфейс от бизнес-логики от операций с базой данных.

2022 WebDevInsider