2017-06-01 131 views
-1

我有以下简单实用的计算器JUnit进行测试的GUI

enter image description here

现在,我想在这里应用一些JUnit进行测试。 我不知道如何对Gui进行Junit测试。 所以请帮助我。

代码是:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package calculator; 
import java.io.*; 
import java.text.DecimalFormat; 
/** 
* 
* @author owner 
*/ 
public class Calculator_Utility extends javax.swing.JFrame { 

    /** 
    * Creates new form Calculator_Utility 
    */ 
    public Calculator_Utility() { 
     initComponents();UsePowerKw.setText("4.0"); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
     private void setComponentsName(){ 
     AddButton.setName("Add"); 
    } 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     CostPerKW = new javax.swing.JLabel(); 
     SelectAppliance = new javax.swing.JLabel(); 
     PowerUsage = new javax.swing.JLabel(); 
     NumberHoursUse = new javax.swing.JLabel(); 
     TotalCostApp = new javax.swing.JLabel(); 
     AddButton = new javax.swing.JButton(); 
     CostPerKwTextField = new javax.swing.JTextField(); 
     UsePowerKw = new javax.swing.JTextField(); 
     HourUse = new javax.swing.JTextField(); 
     CostApp = new javax.swing.JTextField(); 
     AllTotal = new javax.swing.JLabel(); 
     AllTotalApp = new javax.swing.JTextField(); 
     SelectApp = new javax.swing.JComboBox<>(); 
     Showfield = new javax.swing.JTextField(); 
     GallonWater = new javax.swing.JLabel(); 
     GallonWat = new javax.swing.JTextField(); 
     Export = new javax.swing.JButton(); 
     CostGallon = new javax.swing.JLabel(); 
     CostGall = new javax.swing.JTextField(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     CostPerKW.setText("Cost Per KW Hour:"); 

     SelectAppliance.setText("Select Appliance:"); 

     PowerUsage.setText("Power Usage In KW Hours:"); 

     NumberHoursUse.setText("Number of Hours use per day:"); 

     TotalCostApp.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     TotalCostApp.setText("Total Cost For Appliance"); 

     AddButton.setText("ADD"); 
     AddButton.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       AddButtonActionPerformed(evt); 
      } 
     }); 

     CostPerKwTextField.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       CostPerKwTextFieldActionPerformed(evt); 
      } 
     }); 

     UsePowerKw.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       UsePowerKwActionPerformed(evt); 
      } 
     }); 

     AllTotal.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N 
     AllTotal.setText("Total of All Appliances"); 

     SelectApp.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Refrigerator", "Washer", "Dryer", "Freezer", "Air Conditioner" })); 
     SelectApp.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       SelectAppActionPerformed(evt); 
      } 
     }); 

     GallonWater.setText("Gallon of Water:"); 

     Export.setText("Export"); 
     Export.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       ExportActionPerformed(evt); 
      } 
     }); 

     CostGallon.setText("Cost Per Gallon:"); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addGroup(layout.createSequentialGroup() 
           .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) 
             .addComponent(NumberHoursUse) 
             .addComponent(SelectAppliance) 
             .addComponent(PowerUsage) 
             .addComponent(CostPerKW)) 
            .addComponent(CostGallon, javax.swing.GroupLayout.Alignment.TRAILING) 
            .addComponent(GallonWater, javax.swing.GroupLayout.Alignment.TRAILING)) 
           .addGap(4, 4, 4)) 
          .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
           .addComponent(AllTotal) 
           .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
          .addComponent(CostPerKwTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(UsePowerKw, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(HourUse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(SelectApp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(AllTotalApp, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(GallonWat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(CostGall, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)) 
         .addGap(0, 0, Short.MAX_VALUE)) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(Showfield, javax.swing.GroupLayout.PREFERRED_SIZE, 270, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 21, Short.MAX_VALUE) 
         .addComponent(Export))) 
       .addContainerGap()) 
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
       .addGap(0, 0, Short.MAX_VALUE) 
       .addComponent(TotalCostApp) 
       .addGap(4, 4, 4) 
       .addComponent(CostApp, javax.swing.GroupLayout.PREFERRED_SIZE, 121, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGap(18, 18, 18) 
       .addComponent(AddButton) 
       .addGap(24, 24, 24)) 
     ); 

     layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {AllTotalApp, CostApp, CostGall, CostPerKwTextField, GallonWat, HourUse, SelectApp, UsePowerKw}); 

     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(CostPerKW) 
        .addComponent(CostPerKwTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(SelectAppliance) 
        .addComponent(SelectApp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(PowerUsage) 
        .addComponent(UsePowerKw, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addGap(6, 6, 6) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(NumberHoursUse) 
        .addComponent(HourUse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addComponent(GallonWat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(GallonWater) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(CostGallon) 
          .addComponent(CostGall, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
         .addComponent(CostApp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addComponent(TotalCostApp)) 
        .addComponent(AddButton)) 
       .addGap(13, 13, 13) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(AllTotalApp, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(AllTotal)) 
       .addGap(18, 18, 18) 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
        .addComponent(Showfield, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addComponent(Export)) 
       .addContainerGap()) 
     ); 

     pack(); 
    }// </editor-fold>       

    //Declare Variables and intialize the variables 
    private void AddButtonActionPerformed(java.awt.event.ActionEvent evt) {           
    double answer; 
    double total = 0; 
    String s = SelectApp.getSelectedItem().toString(); 

    //Check if user select "Washer" from drop down box, calculate usage with Gallon 
     if (s=="Washer") { 

      //DecimalFormat df= new DecimalFormat("#.##"); 
     number1 = (int)((Double.parseDouble(CostPerKwTextField.getText())));   

     number2 = (int)((Double.parseDouble(UsePowerKw.getText()))); 

     number3 = (int)((Double.parseDouble(HourUse.getText()))); 

     number4 = (int)((Double.parseDouble(GallonWat.getText()))); 

     answer = number1*number2*number3; 
     total =+ answer; 

     CostApp.setText(String.valueOf(answer + "\n")); 

     Showfield.setText(String.valueOf("The appliance run a total of " + answer + "\n")); 

     } 
     //if user select any appliances other than washer calculate usage 
     else 

     number1 = (int)((Double.parseDouble(CostPerKwTextField.getText())));   

     number2 = (int)((Double.parseDouble(UsePowerKw.getText()))); 

     number3 = (int)((Double.parseDouble(HourUse.getText()))); 


     answer = number1*number2*number3; 
     total =+ answer; 


     //Calculated amount is put into field 
     CostApp.setText(String.valueOf(answer + "\n")); 

     Showfield.setText(String.valueOf("The appliance run a total of " + answer + "\n")); 


         // TODO add your handling code here: 
    }           

    //Action listener/Events for JCombo. Pre-defined Power Usage for Each Appliacnes 
    private void SelectAppActionPerformed(java.awt.event.ActionEvent evt) {           
     // TODO add your handling code here: 

     String s=SelectApp.getSelectedItem().toString(); 
     double r=4; 
     double w=7; 
     double x=12; 
     double y=16; 
     double z=24; 
     if (s=="Refrigerator"){ 
      UsePowerKw.setText(String.valueOf(r)); 

     } 
     else if (s=="Washer") {UsePowerKw.setText(String.valueOf(w));} 
     else if (s=="Dryer") {UsePowerKw.setText(String.valueOf(x));} 
     else if (s=="Freezer") {UsePowerKw.setText(String.valueOf(y));} 
     else UsePowerKw.setText(String.valueOf(z)); 


    }           

    private void UsePowerKwActionPerformed(java.awt.event.ActionEvent evt) {           
     // TODO add your handling code here: 
     //If jComboBox1 = "Refrigerator" then set jTextField4 = 22 
    }           


    //Action Listener/Event creates Data.txt with output 
    private void ExportActionPerformed(java.awt.event.ActionEvent evt) {          
     File file = new File("Data.txt"); 

     try (Writer writer = new BufferedWriter(new FileWriter(file))) { 
      String contents = Showfield.getText(); 

        //"The quick brown fox" + 
        //System.getProperty("line.separator") + 
        //"jumps over the lazy dog."; 

      writer.write(contents); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    }          

    private void CostPerKwTextFieldActionPerformed(java.awt.event.ActionEvent evt) {             
     // TODO add your handling code here: 
    }             

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(Calculator_Utility.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(Calculator_Utility.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(Calculator_Utility.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(Calculator_Utility.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Calculator_Utility().setVisible(true); 
      } 
     }); 
    } 

    public double number1, number2, number3, number4; 
    // Variables declaration - do not modify      
    private javax.swing.JButton AddButton; 
    private javax.swing.JLabel AllTotal; 
    private javax.swing.JTextField AllTotalApp; 
    private javax.swing.JTextField CostApp; 
    private javax.swing.JTextField CostGall; 
    private javax.swing.JLabel CostGallon; 
    private javax.swing.JLabel CostPerKW; 
    private javax.swing.JTextField CostPerKwTextField; 
    private javax.swing.JButton Export; 
    private javax.swing.JTextField GallonWat; 
    private javax.swing.JLabel GallonWater; 
    private javax.swing.JTextField HourUse; 
    private javax.swing.JLabel NumberHoursUse; 
    private javax.swing.JLabel PowerUsage; 
    private javax.swing.JComboBox<String> SelectApp; 
    private javax.swing.JLabel SelectAppliance; 
    private javax.swing.JTextField Showfield; 
    private javax.swing.JLabel TotalCostApp; 
    private javax.swing.JTextField UsePowerKw; 
    // End of variables declaration     
} 

你可以申请像正常的工作,(实际==预期结果)等任何测试用例

+0

您应该将您的UI输入绑定到模型。这个模型没有任何用户界面。控制器知道模型并计算结果。因此,您可以将值设置为模型并检查计算出的值。另请参阅[MVC](https://de.wikipedia.org/wiki/Model_View_Controller) –

+0

对于UI测试,您可以查看https://eclipse.org/jubula – cheffe

回答

0

不能使用JUnit测试GUI。你只能测试这些方法。

例如你有一个JButton有一个ActionListener女巫调用该方法计算(1,1):

JButton showDialogButton = new JButton("Text Button"); 
showDialogButton.addActionListener(new ActionListener() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     calculate(1, 1); 
    } 
}); 

private int calculate(int n1, int n2){ 
    return n1 + n2; 
} 

现在,你测试将JButton但你可以测试方法“计算”。我们知道,计算(1,1)将返回美国2所以我们测试一下:

assertEquals(2, calculate(1, 1)); 

这意味着,你不能“用JUnit按下按钮”,但你可以测试按钮的功能的操作。

+0

这更多的是评论而不是答案... –

+0

I改变了我的答案。我希望你明白我的意思。 –

+0

阅读此https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller关于MVC模式。你可以分割你的模型,视图和你的控制器。 –