[英]Method assertEquals(Object, object) in the type Assert is not applicable for the arguments (String, Void)
[英]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
的方法。 它不返回任何东西。
(大概编译器正在谈论的“不同类型”是String
和void
或Void
。但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.