当前位置: 首页 > 知识库问答 >
问题:

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

姬昀
2023-03-14

问题是我对程序的输入是整数数据类型,输出是双数据类型。因此,在编写参数化JUnit测试用例时,assertEquals会自动删除。。。显示2个错误。它们如下:-类型Assert中的方法assertEquals(double,double)已被弃用-类型循环中的方法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));
        
        
    }

}

    

当我试图运行测试用例时,它显示了以下错误:java。lang.AssertionError:使用assertEquals(预期、实际、增量)来比较浮点数。请帮我重写这个JUnit测试用例。我试过好几次了。请帮帮我。非常感谢!

共有1个答案

东方涛
2023-03-14

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

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

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

数学。abs(预期-实际)

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)现在已被弃用。这里有更多详细信息,为什么在JUnit中不推荐使用assertEquals(double,double)?

 类似资料:
  • 问题内容: 我有一个在一个(主)线程中工作的Java代码。从主线程中,我产生了一个新线程,在其中进行服务器调用。服务器调用完成后,我在新线程中进行了一些工作,然后代码加入了主线程。 我正在使用Eclipse Jobs进行服务器调用。 我想知道,如何为此编写一个JUnit测试用例。 问题答案: 您可能需要重组代码,以便可以轻松对其进行测试。 我可以看到几个不同的测试区域: 线程管理代码:启动线程并可

  • customer-Mapper.xml daoimpl.java

  • 主要内容:1 参数化测试的介绍,2 使用@Parameter进行字段注入而不是构造函数,3 使用单个参数进行测试,4 识别单个测试用例1 参数化测试的介绍 自定义流道参数化实现参数化测试。运行参数化测试类时,将为测试方法和测试数据元素的叉积创建实例。 例如,要测试斐波那契函数,请编写: FibonacciTest的每个实例都将使用二元参数构造函数和方法中的数据值构造 @Parameters 。 2 使用@Parameter进行字段注入而不是构造函数 也可以将数据值直接注入字段中,而无需使用@Pa

  • 我正在尝试为这样的情况编写测试用例,在这个情况下,我期待的是datatruncation异常,我试图使用assert equals和比较消息来断言相同的情况,但是看起来像是比较两个字符串,有没有更好的方法来为这样的异常编写测试用例。 我正在使用JUnit5

  • 我想用mock它来模拟下面代码中的数据源对象,但每次我都得到空指针异常。 我试过嘲笑数据源和连接,但似乎什么都不起作用。

  • 我是java新手,我正在编写一个ATM程序,用户可以输入三次pin码,如果他们输入的pin码不正确,他们的卡就会被阻塞。我曾尝试为以下代码编写Junit测试,但似乎无法理解。我有两门课,分别是AtmPin和AtmTester。AtmTester是主类所在的位置。 AtmPin.java AtmTester.java