junit assertEquals是否只能适用于相同的数据类型?

unftdfkk  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(149)

AssertEquals可以应用于不同数据类型的输入和输出吗?当我将AssertEquals应用于不同数据类型的输入和输出时,AssertEquals被删除..甚至成功的测试用例也没有通过?
我所说的不同数据类型的输入和输出意味着..举个例子,考虑一个程序来检查一个数字是偶数还是奇数。这个程序的输入是一个“int”数据类型的数字,输出是一个“String”数据类型,它打印出的数字是“偶数”还是“奇数”。
下面是代码

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测试用例...但是由于数据类型不同,其中有一些错误。package BasicTesting;

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测试用例。希望你会有所帮助。

x7yiwoj4

x7yiwoj41#

恐怕你的测试是无意义的。你不能将调用OddEven的结果与任何东西进行比较。它是一个void方法。它不返回任何东西。
(编译器所说的“不同类型”可能是StringvoidVoid。但void根本不是一个真正的类型。或者至少,没有任何有用的意义。)
不幸的是,如果一个方法的唯一可观察行为是写入标准输出,那么编写单元测试就 * 困难 * 了。您需要使用一个模拟框架并模拟System.out。(或者使用System.setOut,用一些流来替换标准输出,这样您就可以 * 捕获 * 输出。)
一个更好的想法(也是更好的设计)是让你的evenOdd方法不写标准输出,而是让它返回一个boolean,让调用者写消息......或者对结果做其他的事情。

f8rj6qna

f8rj6qna2#

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

Assert.assertEquals(23.374f, 23.374d)

您可以将值 Package 在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也会增加一些开销。

相关问题