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测试用例。希望你会有所帮助。
2条答案
按热度按时间x7yiwoj41#
恐怕你的测试是无意义的。你不能将调用
OddEven
的结果与任何东西进行比较。它是一个void
方法。它不返回任何东西。(编译器所说的“不同类型”可能是
String
和void
或Void
。但void
根本不是一个真正的类型。或者至少,没有任何有用的意义。)不幸的是,如果一个方法的唯一可观察行为是写入标准输出,那么编写单元测试就 * 困难 * 了。您需要使用一个模拟框架并模拟
System.out
。(或者使用System.setOut
,用一些流来替换标准输出,这样您就可以 * 捕获 * 输出。)一个更好的想法(也是更好的设计)是让你的
evenOdd
方法不写标准输出,而是让它返回一个boolean
,让调用者写消息......或者对结果做其他的事情。f8rj6qna2#
如果你想比较不同的数据类型,比如int和long,就像这样-
您可以将值 Package 在BigDecimal中,并像这样进行比较-
注意--使用BigDecimal也会增加一些开销。