2016-01-01 4 views
0

Мне нужно добавить тесты для этой java-программы. Но я не понимаю, для чего я могу использовать тесты в такой программе. Я действительно не вижу преимуществ использования тестов, потому что это не программа, как поиск, если число является или не является простым.Модульные тесты в 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); 
     } 

    } 
} 
+0

Вы не видите смысла в тестировании базы данных? Ну ... – Tom

+0

Закройте глаза на содержание методов и начните тестирование. –

+1

Еще одно преимущество тестов: тесты также могут помочь вам в отладке кода: вы знаете, что является правильным результатом, запустите тест в режиме отладки, например, в eclipse, и у вас есть быстрый способ отладки вместо того, чтобы запускать полное развертывание , –

ответ

5

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

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

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

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

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

1

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

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

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

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

Смежные вопросы