单元测试使用反射的方法

时间:2014-06-24 13:35:24

标签: java unit-testing reflection junit

我正在尝试对像这样的一些java方法进行单元测试:

public boolean isInt (Object object){
    return object.getClass().equals(Integer.class);
}

这是一个非常简单的例子,但让我们继续使用它。

问题是:如何在没有为java世界中的每个基元类型编写测试的情况下,对单元测试(使用JUnit)进行单元测试?也许Concolic Unit TestingjCute)就是答案?

请留下您的想法,我希望尽可能减少编码,尽可能彻底地进行测试。

编辑:单元测试的目标是检查方法是否返回与Integer不同的任何类型的正确结果,而不必定义一组逐个检查所有类型的测试。当我说原语时,我指的是JDK中的本机类型(String,Float,Double,List,Map,...)

2 个答案:

答案 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吗?)。