简单二次方程的 JUnit 测试

JUnit test for simple quadratic equation

我知道它看起来很原始,但我应该制作一个 java 程序来计算二次方程的根并使其尽可能简单(即可读)并为其编写测试。

显然我已经得到了程序,但我以前从未进行过 JUnit 测试,我不确定如何开始编写这样的程序:

if(a != 0) { 
    if(delta > 0) { 
        x1 = ((-b)-deltas)/(2*a);
        x2 = ((-b)+deltas)/(2*a);
        System.out.println("x1=" + x1 + "\n" + "x2=" + x2);
    } else if(delta == 0) { 
        x1 = (-b)/(2*a);
        System.out.println("x1=" + x1);
    } else { 
        System.out.println("No real roots.");
    }
} else {
    System.out.println("Error: division by zero.");
}

Deltas 显然是 delta 的平方根。

我被告知测试应该包含所有案例 (4) 的示例,但到目前为止我发现的所有内容都需要创建额外的 类 等

我什至不知道我应该使用 try catch 还是其他什么?

  1. 创建函数。例如int[] rootsOfQuadraticEquation(int a, int b, int c) 或类似的东西。 Return 根并删除所有 System.out.println。您可以在客户端函数中打印结果。
  2. 实施 parameterized test。每个测试数据元素应包含 abcexpectedResults.
  3. 运行 你的测试。

下次可以考虑使用TDD

使用 JUnit:

给定 class:

public class Compute {

    static double[] solve(double a, double b, double delta) {

        double x1, x2;
        double[] results = new double[2];

        if (a != 0) {
            if (delta > 0) {
                x1 = ((-b) - delta) / (2 * a);
                x2 = ((-b) + delta) / (2 * a);
                results[0] = x1;
                results[1] = x2;
                System.out.println("x1=" + x1 + "\n" + "x2=" + x2);
            } else if (delta == 0) {
                x1 = (-b) / (2 * a);
                System.out.println("x1=" + x1);
            } else {
                System.out.println("No real roots.");
            }
        } else {
            System.out.println("Error: division by zero.");
        }

        return results;
    }
}

它的测试应该类似于(例如 a=1,b=-3,delata = 5):

public class ComputeTest {

...
    /**
     * Test of solve method, of class Compute.
     */
    @Test
    public void testSolve() {
        double a = 1;
        double b = -3;
        double delta = 5;
        double[] expectedResult = {-1,4}; // x1 and x2
        double[] result = Compute.solve(a, b, delta);

        assertArrayEquals(expectedResult, result); // make the actual test

        fail("The test case is a prototype."); // fail otherwise
    }

}

请注意,JUnit 4.6 中已为 double[] 添加了 assertArrayEquals。 更多信息是 here .