如何编写两个数字的测试?

How to write a test of two numbers?

我不确定我的看法是否正确。我有一个正常的功能,我扫描两个数字并将它们加在一起。

现在,我想编写一个测试来检查函数是否正确。

我要添加的功能:

public class adding {
    public static void main(String[] args) {
        int number1;
        int number2;
        int sum;
        Scanner scan;
        scan = new Scanner(System.in);
        scan.useDelimiter(System.lineSeparator());

        System.out.println("Please give the first number: ");
        number1 = scan.nextInt();
        System.out.println("Please give the second number: ");
        number2 = scan.nextInt();
        
        sum = number1 + number2;
        System.out.println("Sum of the two numbers: " + sum);

    }
}

测试函数:

import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.Before;
public class addingTest {
    @Before
    public void testing() throws Exception {
    
    }
    @Test
    public void test() {
        int sum = 4+5;
        assertEquals(sum, 9);
    }
}

目前您的测试没有执行任何操作。好吧,除了它测试 4+5 是否为 9 之外什么都没有,这是正确的,但这不会让你到任何地方。

在最基本的形式中,单元测试是验证 class 的“单元”功能的测试。这意味着您的代码的一部分有自己的责任,并且独立于任何其他依赖项进行测试。

现在你只有一个main方法,没有什么可以测试的。相反,您应该做的是将“逻辑”提取到方法中。您正在尝试测试是否正确添加了两个数字,因此将其提取到一个方法中:

public static int add(int number1, int number2) {
    return number1 + number2;
}

将该方法集成到您的代码中:

public class Rechenprogramm {
    public static void main(String[] args) {
    
        ...

        System.out.println("Please give the first number: ");
        number1 = scan.nextInt();
        System.out.println("Please give the second number: ");
        number2 = scan.nextInt();
    
        sum = add(number1, number2);
        ...
    }

    public static int add(int number1, int number2) {
        return number1 + number2;
    }
}

现在您已经提取了功能,可以以单元测试的形式进行隔离测试:

@Test
public void test() {
    int number1 = 4;
    int number2 = 5;
    int actualSum = Rechenprogramm.add(number1, number2);

    assertEquals(9, actualSum);
}