简单二次方程的JUnit检验

时间:2015-02-01 10:16:53

标签: java junit

我知道它看起来很原始,但是我应该制作一个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或其他东西?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

使用JUnit:

鉴于课程:

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中添加了assertArrayEquals double[]。 更多信息是here