我知道它看起来很原始,但是我应该制作一个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或其他东西?
答案 0 :(得分:2)
int[] rootsOfQuadraticEquation(int a, int b, int c)
或类似的东西。返回根并删除所有System.out.println
。您可以在客户端功能中打印结果。 a
,b
,c
和expectedResults
。您可以考虑下次使用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。