-1

我是 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();

} 

}

任何建议表示赞赏!

4

2 回答 2

1

您的代码有很多错误。许多“错误”都与难以以系统方式进行测试的事物有关。

在一个好的 OO 设计中,一个方法只做一个任务和一个任务。但是您的方法正在混合多个任务:

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

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

广告@roomy 指出,进行测试的正确方法是使用JUnit 之类的框架开发一套单元测试。但是您的应用程序需要设计为可测试的……通过调用方法并检查它们是否产生正确的结果。

涉及输入和输出的测试比较困难,但如果您设置输入和输出流参数,则可以。另一种选择是创建一个“系统测试”,您可以在其中创建一个输入文件(或一组输入文件)和相应的预期输出文件,使用每个输入运行程序并检查输出是否与预期输出匹配。提示:使用 shell 级文件重定向...


除了上述几点之外,还有几个错误可能会咬你:

  1. 您永远不应该使用以大写字母开头的方法名称。它与公认的 Java 风格背道而驰……人们会抱怨你,并扣掉你的风格标记。

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

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

于 2018-04-03T11:29:14.330 回答
1

你应该在你的程序中尝试 Junit 测试套件。 Junit 或者您可以使用调试模型来找出发生了什么。

于 2018-04-03T10:56:54.027 回答