我正在尝试对像这样的一些java方法进行单元测试:
public boolean isInt (Object object){
return object.getClass().equals(Integer.class);
}
这是一个非常简单的例子,但让我们继续使用它。
问题是:如何在没有为java世界中的每个基元类型编写测试的情况下,对单元测试(使用JUnit)进行单元测试?也许Concolic Unit Testing(jCute)就是答案?
请留下您的想法,我希望尽可能减少编码,尽可能彻底地进行测试。
编辑:单元测试的目标是检查方法是否返回与Integer不同的任何类型的正确结果,而不必定义一组逐个检查所有类型的测试。当我说原语时,我指的是JDK中的本机类型(String,Float,Double,List,Map,...)
答案 0 :(得分:1)
有一个有限的基本类型列表:byte,short,int,long,boolean,char。每个原语都有相应的包装器。而已。因此,为每种基本类型编写测试非常容易。
顺便说一句,你的代码不适用于原始代码,因为它们不是对象,因此你无法调用isInt(123)
。
如果你想写更短的测试,可以写一些类似的东西:
@Test
public void isInt() {
assertTrue(obj.isInt(new Integer(1)));
}
@Test
public void isNotInt() {
for (Object obj : new Object[] {new Short(1), new Boolean(true), new Long(1), new Chaeracter('a')}) {
assertFalse(obj.isInt(obj));
}
}
JUnit还支持Parametrized
测试。然而,对于这种简单的案例来说,这听起来有点过分。
答案 1 :(得分:0)
您无法针对您的方法测试所有类型 - 所以我会保持简单:
assertTrue(isInt(1)); //an Integer
assertFalse(isInt(1d); //another Number that is not an Integer
assertFalse(isInt(new Object())); //a random Object
你可能也希望为null
添加一个测试(它应该抛出NPE吗?)。