JUnit测试:如何使用JUnit 4为程序编写参数化测试用例来查找圆的面积?



问题是我对程序的输入是整数数据类型,输出是双精度数据类型。因此,在编写参数化的JUnit测试用例时,asserequals会自动取消…显示2个错误。它们如下:- Assert类型中的assertEquals(double, double)方法已弃用类型Circle中的findarea(int)方法不适用于参数(int,double)
这里的方法findarea是我的方法来查找圆的面积。这是我的代码。

package BasicTesting;

import java.io.*;
class Circle
{
public static void main(String args[])throws IOException  {
BufferedReader ob = new BufferedReader(new InputStreamReader(System.in));
int radius ;

System.out.println("Enter the radius of circle.. ");
radius=Integer.parseInt(ob.readLine());
Circle a=new Circle();
double g=a.findarea(radius);
System.out.println(g);
}




public static double findarea(int radius){
double area;


double pi=3.14;
area = pi * radius * radius;
return area;
}
}

这是我的测试案例

package BasicTesting;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class CircleTest {



public CircleTest(int input, double expected,double delta) {
super();
this.input = input;
this.expected = expected;
this.delta = delta;
}
Circle ob=new Circle();
private int input;
private double expected;
private double delta;
@Parameters

public static Iterable<Object[]> testConditions() {

return Arrays.asList(new Object[][] {{1,3.14d,-2.14d},{2,12.56d,-10.56}});



}


@Test
public void Circletest() {
assertEquals(expected,Circle.findarea(input));


}
}

当我尝试运行测试用例时,它显示了以下错误:assertionerror:使用assertEquals(expected, actual, delta)来比较浮点数。请帮我重写这个JUnit测试用例。我试过好几次了。请帮帮我。提前感谢!

要修复您得到的错误,在assertEquals中提供delta作为第三个参数。

@Test
public void circleTest() {
assertEquals(expected, Circle.findarea(input), delta);
}

Delta基本上是精度的量。这意味着如果期望值和实际值之间的绝对差小于或等于增量。它仍然会考虑匹配。简而言之

Math.abs(expected - actual) <= delta。例如

assertEquals(1.1, 1.2, 0.1); // diff: 0.1, result : true 
assertEquals(1.10, 1.20, 0.09); // diff: 0.1, result : false 
assertEquals(1.9999, 2.0, 0.10); // diff: 0.0001, result:  true 

注意,现在不支持assertEquals(double, double)了。这里有更多的细节
为什么assertEquals(double,double)在JUnit中被弃用?

最新更新