如何从主方法JAVA测试我的程序

时间:2018-04-03 10:50:40

标签: java testing methods main main-method

我是Java新手。我想测试计算器中可用的方法。什么是最有效的测试方法?

package BeginnerLevel;

import java.util.Scanner;

public class Calculator {

这是构造函数:

public Calculator(){


  while (true){
      System.out.println("Personal Calculator\n"+
      "Addition---> 1 \n"+"Subtraction---> 2\n"+"Multiplication---> 3\n"+"Division---> 4\n"+"Exit--->0");
       Scanner input = new Scanner(System.in);

       int UsrIn= input.nextInt();

       input.close();


      switch (UsrIn){

      case 1: 
          Addition();
          break;
      case 2: 
          Subtraction();
          break;
      case 3:
          Multiplication();
          break;

      case 4:
          Division();
          break;

      case 0:
          break;  
      }


  }
}

这些是在switch case中调用的方法。

添加方法:

private void Addition(){

     Scanner input= new Scanner(System.in);

     double total=0;
     double firstnum=0;
     double secondnum=0;

     System.out.println("Enter Fist number: ");
     firstnum= input.nextDouble();

     System.out.println("Enter Fist number: ");
     secondnum=input.nextDouble();
    input.close();

     total= firstnum + secondnum;

    System.out.println("The result of Addition for "+ firstnum +" + "+secondnum+" is "+total);
}

减法方法:

private void Subtraction(){

    Scanner input= new Scanner(System.in);

    double total=0;
    double first=0;
    double second=0;

    System.out.println("Enter First number ");
    first=input.nextDouble();

    System.out.println("Enter Second number ");
    second=input.nextDouble();

    total= first-second;
    System.out.println("The result of Addition for "+ first +" + "+second+" is "+total);

    input.close();

}

乘法方法:

private void Multiplication(){
Scanner input= new Scanner(System.in);

    double total=0;
    double first=0;
    double second=0;

    System.out.println("Enter First number ");
    first=input.nextDouble();

    System.out.println("Enter Second number ");
    second=input.nextDouble();

    total= first*second;
    System.out.println("The result of Addition for "+ first +" + "+second+" is "+total);

    input.close();
}

分区方法:

private void Division(){
    Scanner input= new Scanner(System.in);
    double total=0;
    double first=0;
    double second=0;

    System.out.println("Enter First number ");

    first=input.nextDouble();

    System.out.println("Enter Second number ");
    second=input.nextDouble();

    total= first*second;
    System.out.println("The result of Addition for "+ first +" + "+second+" is "+total);

    input.close();

} 

}

任何建议表示赞赏!

2 个答案:

答案 0 :(得分:1)

您应该在程序中尝试Junit测试套件。 Junit 或者您可以使用调试模型来查明发生的情况。

答案 1 :(得分:1)

你的代码有点不对劲。而且,大多数“错误”与能够以系统方式进行测试困难的事情有关。

在良好的OO设计中,方法只能执行一项任务和一项任务。但是你的方法混合了多个任务:

  • 请求和阅读参数,
  • 执行算术运算,
  • 打印结果。

你的构造函数构造函数更糟糕。构造函数应该构造/初始化一个对象。它不应该包含对象的“业务逻辑”。重构类,以便业务逻辑在方法中......然后实例化类并调用方法。

Ad @roomy指出,正确的测试方法是使用像JUnit这样的框架开发一套单元测试。但是,您的应用程序需要设计为 testable ...通过调用方法并检查它们是否产生正确的结果。

涉及输入和输出的测试更加困难,但只要您输入和输出流参数,就可以进行测试。另一种方法是创建一个“系统测试”,您可以在其中创建输入文件(或输入文件集)和相应的预期输出文件,使用每个输入运行程序并检查输出是否与预期输出匹配。提示:使用shell级文件重定向...

除了以上几点之外,还有一些错误可能会让你感到困惑:

  1. 您永远不应该使用以大写字母开头的方法名称。它违背了公认的Java风格......人们会抱怨你,并将你的风格标记停靠。

  2. 关闭System.in等等,你需要非常小心。一旦它们关闭,您将无法重新打开它们,也不能读取/写入它们。

  3. 还要注意丢弃可能从底层输入源读取数据的扫描仪。