简单二次方程的 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 还是其他什么?
- 创建函数。例如
int[] rootsOfQuadraticEquation(int a, int b, int c)
或类似的东西。 Return 根并删除所有 System.out.println
。您可以在客户端函数中打印结果。
- 实施 parameterized test。每个测试数据元素应包含
a
、b
、c
和 expectedResults
.
- 运行 你的测试。
下次可以考虑使用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 .
我知道它看起来很原始,但我应该制作一个 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 还是其他什么?
- 创建函数。例如
int[] rootsOfQuadraticEquation(int a, int b, int c)
或类似的东西。 Return 根并删除所有System.out.println
。您可以在客户端函数中打印结果。 - 实施 parameterized test。每个测试数据元素应包含
a
、b
、c
和expectedResults
. - 运行 你的测试。
下次可以考虑使用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 .