繁体   English   中英

assertEquals 只能适用于相同的数据类型吗?

[英]Can assertEquals only be applicable for same data types?

可以将 AssertEquals 应用于不同的数据类型输入和输出吗?当我将 AssertEquals 应用于不同的数据类型输入和输出时,AssertEquals 会被删除……甚至成功的测试用例也没有通过?

我所说的不同数据类型的输入和输出是什么意思..比如说,考虑一个程序来检查一个数字是偶数还是奇数。这个程序的输入是一个“int”数据类型的数字,输出到这个程序是一个“字符串”数据类型,打印数字是“偶数”或“奇数”。

这是代码

package BasicTesting;

import java.util.*;
class EvenOdd
{
    
  public static void main(String args[])
  {
    System.out.println("Enter any integer to check whether its odd or even...");
    Scanner ob = new Scanner(System.in);
    int i;
    
    i = ob.nextInt();
    OddEven(i);
    
  }
  public static void OddEven(int i) {
      if(i%2==0)
        {
            System.out.println("You entered an even number");
        }
        else
        {
            System.out.println("You entered an odd number");
        }
  }
}

这是我尝试编写的 JUnit 测试用例……但由于数据类型不同,其中存在一些错误。 包基本测试;

import static org.junit.Assert.*;

import org.junit.Test;

public class EvenOddTest {

    @Test
    public static void test() {
        
        

        // TODO Auto-generated method stub
        EvenOdd a=new EvenOdd();
        //int res=a.OddEven(10);
        assertEquals("You entered an even number",a.OddEven(10));
        
    }

}

请帮我编写参数化的 JUnit 测试用例。希望您能有所帮助。

恐怕你的测试是荒谬的。 您无法将调用OddEven的结果与任何内容进行比较。 这是一种void的方法。 它不返回任何东西。

(大概编译器正在谈论的“不同类型”是StringvoidVoid 。但void根本不是真正的类型。或者至少,没有任何用处。)

不幸的是,唯一可观察到的动作是写入标准输出的方法很难编写单元测试。 您需要使用模拟框架和模拟System.out (或使用System.setOut将标准输出替换为一些允许您捕获输出的流。)

一个更好的想法(和更好的设计)是让您的evenOdd方法不写入标准输出。 相反,让它返回一个boolean ,并让调用者编写消息......或对结果执行其他操作。

如果你想比较不同的数据类型,比如 int 和 long 这样的东西 -

Assert.assertEquals(23.374f, 23.374d)

您可以将值包装在 BigDecimal 中并像这样进行比较 -

float f = 23.374f;
double  d = 23.374d;
BigDecimal decimal_f = new BigDecimal(Float.toString(f));
BigDecimal decimal_d = new BigDecimal(Double.toString(d));
assertEquals(decimal_f,decimal_d);

注意 - BigDecimal 的使用也会增加一些开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM