如何编写junit测试脚本?

时间:2016-04-20 22:40:41

标签: java shell junit

我写了一个java代码,但是我必须为它写一个Junit测试脚本,但我还没有经验。我试了几个小时,但我无法理解它是如何工作的。所以你的帮助非常受欢迎。在此先感谢:)你有任何tipps给我? :)

 import java.awt.*;
 import java.awt.event.*;

 class MailBox extends Frame {

   private boolean request;
   private String message;
   TextField tf1;

 public MailBox() {

   Dimension screenDim = getToolkit().getScreenSize();
   Dimension frameDim = getPreferredSize(); 
   setLocation((screenDim.width-frameDim.width)/2,    (screenDim.heightframeDim.height)/2); addWindowListener(new WindowAdapter() {

 public void windowClosing(WindowEvent e) {

   dispose();
   System.exit(0);
  }
 }
  Panel myPanel = new Panel();
  myPanel.setLayout(new FlowLayout());
  Label label1 = new Label("Message: ");
  Button button1 = new Button("Send");
  button1.addActionListener(new button1AL());
  tf1 = new TextField("", 20);
  myPanel.add(label1);
  myPanel.add(tf1);
  myPanel.add(button1);
  add(myPanel, BorderLayout.CENTER);
  setTitle("Mailbox");
  pack();
  show();
}

 public synchronized void storeMessage(String message){
   while(request==true){
    try{
      wait();
    }
    catch(InterruptedException e){
    }
   }
  request = true;
  this.message = message;
  notify();
}
public synchronized String retrieveMessage(){

  while(request==false){
    try{
      wait();
    }
  catch(InterruptedException e){
    }
  }
  request=false;
  notify();
  return message;
 }

public static void main(String args[]) {

 System.out.println("Starting Mailbox...");
  MailBox MyMailBox = new MailBox();
  Consumer c1 = new Consumer(MyMailBox);
   Thread t1 = new Thread(c1);
   t1.start();
}

 class button1AL implements ActionListener{
public void actionPerformed(ActionEvent ae){
  storeMessage(tf1.getText());
  tf1.setText("");
 }
}
}

2 个答案:

答案 0 :(得分:2)

我会说,在你的情况下,程序没有达到应该进行单元测试的水平。我没有看到任何理由为什么你需要测试一些构造函数只是初始化类的字段并且程序打印的东西。我不会检查。

如果出现错误并且此错误可能包含不同的错误消息,最好验证消息是否相同,但这不是您的情况。因此,重点是您的单元测试应该测试业务逻辑

考虑这个模板:

@Test
public void testGoUntilTankIsEmpty() throws Exception {
   // SETUP SUT
   Car car = new Car();
   car.fillFullTank();
   car.setSpeed(80);
   // EXERCISE
   int distanceInKm = car.goUntilTankIsEmpty();   
   // VERIFY
   Assert.assertEquals(800, distanceInKm);
}

在这种情况下,我们运用(测试)指定的方法,并期望根据我们的初步设置结果为800。如果确实如此,则单位测试将通过,否则将失败。

请记住,单元测试应该只测试一些单元,所以只需要一小段代码,但实际的功能。

答案 1 :(得分:1)

JUnit的工作是通过测试您使用预期输出编写的代码,或者如果您想测试错误处理是否有效,则测试输出不正确。

在您的情况下,您只需针对其输出的预期字符串进行测试。

所以对你所拥有的东西进行基本测试会看起来像......

import org.junit.Test;
import org.junit.Assert.assertEquals
public class BasicTest{
      @Test
      public void describeAnimalTest(){
            AnimalNew animal = new AnimalNew("Dog", 10, "x"); 
            assertEquals("Dog is on level 10 und is a type of x", animal.describeAnimal(); 
       }
  }