使用复杂的代码执行JUnit测试

时间:2014-02-26 14:50:03

标签: java junit

有人可以指导我如何在java中执行JUnit测试。我观看过youtube视频,但我发现很难理解获得更多补码单元测试的概念。

http://www.youtube.com/watch?v=lYnMyi81hrs http://www.youtube.com/watch?v=KX6CgjHciXU

例如,我该如何测试此代码?

text = "I was chosen";
JButton button1 = new Jbutton("");
JButton button2 = new Jbutton("");
JButton button3 = new Jbutton("");
List<JButton> buttons = Arrays.asList(button1, button2, button3);
Random r = new Random();
buttons.get(r.nextInt(buttons.size())).setText(text);

并且还测试方法中的大块代码并在其他地方调用。

编辑:

包测试;

import javax.swing.JOptionPane;

public class test {

    String sign = "!";
    String notSign = "-";

    public test(){
        String test = JOptionPane.showInputDialog("Please write a sign: ");

        if (test.equals("!")){
            sign1();
        }
            else if (test.equals("-")){
                sign2();
            }
        }

    public void sign1(){
        sign = "*";
    }
    public void sign2(){
        notSign = "/";
    }
    public static void main(String args[]){
        new test();
    }
}

编辑2:

原因,我想知道Junit测试是如何工作的,因为,我正在为我的拼贴工作这个项目,在完成我的代码之后,它产生了错误,我一遍又一遍地阅读代码,并且没有任何线索臭虫来自哪里。是否有更好的方法来查找错误并修复它们?

3 个答案:

答案 0 :(得分:1)

您可以测试其中一个按钮的名称是否等于文字:

assertTrue(button1.getText().equals(text) || button2.getText().equals(text) || button3.getText().equals(text))

答案 1 :(得分:1)

我一直在那里,一开始很难,但通过练习,你可以变得更好。这是我使用的链接http://www.tutorialspoint.com/junit/index.htm,您也可以从中学习。

答案 2 :(得分:1)

首先,IMO,我从单元测试GUI的东西中看不出任何正面收益。 (完全取决于情况)

其次,你应该测试方法:

e.g。采取方法:

public int add(int i, int j) {
   return i+j;
}

现在,要对这段代码进行单元测试,我们会这样做:

public void shouldReturn5WhenAdding2And3 {
  // When
  int result = testSubject.add(2, 3);       

  // Then
  assertEquals(result, 5);
}

现在进入您的代码: 我建议将以下代码输出并放入其自己的方法中:

Random r = new Random();
buttons.get(r.nextInt(buttons.size())).setText(text);

e.g。

public void printTextOnRandomButton(List<JButton> buttons) {
    Random r = new Random();
    buttons.get(r.nextInt(buttons.size())).setText(text);
} 

然后你可以在单元测试中传入一个按钮列表,并声明其中一个按钮有文本:

public void oneOfButtonsShouldHaveText() {
  // Given
  List<JButton> buttons = testSubject.getButtons();
  // You don't have to get the list of buttons from the tested class, you could
  // create a list of buttons within the test.
  String text = "I was chosen";

  // When
  testSubject.printTextOnRandomButton(buttons);

  // Then
  assertTrue(button1.getText().equals(text) || button2.getText().equals(text) || button3.getText().equals(text));
}

编辑:我可能倾向于在断言中使用XOR而不是OR。