java - 如何为这段java代码编写Junit测试?

标签 java

所以我的问题是我需要为这段代码编写一个 junit 测试,但我无法做到。代码的作用是,根据输入给出评分。

import java.util.Scanner;

public class Grade{

    static void getNumericGrade(){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter numeric grade: ");
        double numGrade = input.nextDouble();
        String letterGrade;
        /**
         *  Method creation to convert numeric grade or GPA to letter grade
         * @param numGrade is GPA
         */

        if (numGrade > 4.00 || numGrade < 0) {
            letterGrade = "N";
        }
        else if (numGrade >= 3.85 && numGrade <= 4.0 )
        {
            letterGrade = "A+";
        }
        else if (numGrade >= 3.5 && numGrade < 3.85 )
        {
            letterGrade = "A";
        }
        else if (numGrade  >= 3.333 && numGrade < 3.5 )
        {
            letterGrade = "A-";
        }
        else if (numGrade >= 3.0 && numGrade < 3.333 )
        {
            letterGrade = "B+";
        }
        else if (numGrade >= 2.667 && numGrade < 3.0 )
        {
            letterGrade = "B";
        }
        else if (numGrade >= 2.333 && numGrade < 2.667 )
        {
            letterGrade = "B-";
        }
        else if (numGrade >= 2.0 && numGrade < 2.333 )
        {
            letterGrade = "C+";
        }
        else if (numGrade >= 1.667 && numGrade < 2.0 )
        {
            letterGrade = "C";
        }
        else if (numGrade >= 1.333 && numGrade < 1.667 )
        {
            letterGrade = "C-";
        }
        else if (numGrade >= 1.0 && numGrade < 1.333 )
        {
            letterGrade = "D+";
        }
        else if (numGrade  > 0 && numGrade < 1.0 )
        {
            letterGrade = "D";
        }
        else        {
            letterGrade = "F";
        }

        if (letterGrade.equalsIgnoreCase("N")){
            System.out.println(numGrade + " is not a valid grade" + letterGrade);
        }
        else{
            System.out.println("Your grade is "  +  letterGrade);
        }
    }

    public static void main(String[] args) {

        /**
         * Prints letter grade from GPA
         * @return letterGrade
         */
        getNumericGrade();
    }
} 

最佳答案

更改函数 getNumericGrade() 以获取参数而不是从扫描仪读取输入,并返回输出而不是在控制台上打印:

static String getNumericGrade(double numGrade) {
    double numGrade = input.nextDouble();
    String letterGrade;
    /**
     *  Method creation to convert numeric grade or GPA to letter grade
     * @param numGrade is GPA
     */

    if (numGrade > 4.00 || numGrade < 0) {
        letterGrade = "N";
    }
    ...
    return letterGrade;
}

更改您的main,以便您从扫描仪获取输入并将其打印在屏幕上:

Scanner input = new Scanner(System.in);
System.out.print("Enter numeric grade: ");
double numGrade = input.nextDouble();
String letterName = getNumericGrade(numGrade);
if (letterGrade.equalsIgnoreCase("N")){

    System.out.println(numGrade + " is not a valid grade" + letterGrade);
}
else{
    System.out.println("Your grade is "  +  letterGrade);
}

...然后像这样轻松测试包含逻辑的方法:

@Test
public void exampleTest() {
    double testInput = 4.5;
    String grade = Grade.getNumericGrade(testInput); 
    assertEquals("expected grade", grade);
}

//more test with more inputs

注意:由于该函数实际上采用 double 值并始终返回一个字符串,因此您可以编写一个单元测试并将其参数化。

您可以查看parameterized tests (available from Junit5)

关于java - 如何为这段java代码编写Junit测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70627367/

相关文章:

java - 确保具有特定注释的字段为 'private'

java - 当没有输入任何内容时解析生成我生成的错误消息的字符串

java - 需要一些好的 iBatis 教程

java - 如何创建返回计算值的公共(public)计算函数?

java - 通用的 getter 和 setter 方法

java.lang.NoSuchMethodError : java. lang.String.isEmpty()Z

java - 可以使 java.util.ArrayList<T>.toArray() 更友好吗?

java - Spring MVC : @ManyToMany DAO?

java - 如何确保父类(super class)中子类方法的线程安全?

java - 在java中从键盘获取多行然后单个字符