Java 单元测试使用反射的方法

Java 单元测试使用反射的方法,java,unit-testing,reflection,junit,Java,Unit Testing,Reflection,Junit,我正在尝试对一些java方法进行单元测试,例如: public boolean isInt (Object object){ return object.getClass().equals(Integer.class); } 这是一个非常简单的例子,但让我们继续吧 问题是:如果不为java世界中的每种原语类型编写测试,如何(使用JUnit)对这样的方法进行单元测试?也许()就是答案 请留下你的想法,我想用更少的编码尽可能彻底地测试 编辑:单元测试的目标是检查该方法是否为Integer以

我正在尝试对一些java方法进行单元测试,例如:

public boolean isInt (Object object){
    return object.getClass().equals(Integer.class);
}
这是一个非常简单的例子,但让我们继续吧

问题是:如果不为java世界中的每种原语类型编写测试,如何(使用JUnit)对这样的方法进行单元测试?也许()就是答案

请留下你的想法,我想用更少的编码尽可能彻底地测试

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

您不能真正根据您的方法测试所有类型,因此我会保持简单:

assertTrue(isInt(1)); //an Integer
assertFalse(isInt(1d); //another Number that is not an Integer
assertFalse(isInt(new Object())); //a random Object

您可能还想为
null
添加一个测试(是否应该抛出一个NPE?)

基本类型的列表有限:byte、short、int、long、boolean、char。每个原语都有相应的包装器。就这样。因此,为每种原语类型编写测试非常容易

顺便说一句,您的代码不能用于primitieves,因为它们不是对象,所以您不能调用
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还支持参数化测试。然而,对于这样一个简单的案例来说,这听起来有点过分了

您通过
newobject()
声明获得了所有可能的类型?不,您没有-我只是不明白测试所有基本类型的意义。但也许我遗漏了什么。我编辑了这个问题,澄清了测试的目标。我不确定我是否明白:所以你不能调用
isInt(123)
。此外,数组中缺少Float和Double。Primitive在Java中有非常特殊的含义,不包括List或Map。您的编辑基本上说您希望测试JDK中定义的所有类。我不认为有一个简单的方法可以做到这一点,我不明白这一点。这就好像你在说:“我有这个方法:
double mult(double a,double b){返回a*b;}
我想检查它是否适用于任何double”。在现实生活中,你只会测试一些极端情况,比如(1,0),(0,1),(0,0),(0,无穷大),(1,无穷大)等等,以及一些正常情况,比如(2,3)。在项目的上下文中,它是有意义的。例如,当您试图将POJO插入到数据库行中时,您需要检查您使用的方法是否可以处理几乎任何事情。