java - 对使用反射的方法进行单元测试

标签 java unit-testing reflection junit

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

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

这是一个非常简单的示例,但我们还是继续吧。

问题是:如何在不为 Java 世界中的每个基本类型编写测试的情况下(使用 JUnit)对这样的方法进行单元测试?也许是Concolic Unit Testing ( jCute ) 是答案吗?

请留下您的想法,我希望用尽可能少的编码来使测试尽可能彻底。

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

最佳答案

原始类型的列表有限: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 还支持参数化测试。然而,对于这种简单的情况来说,这听起来有点过分了。

关于java - 对使用反射的方法进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24388062/

相关文章:

java - 如何在延时后执行某个方法?

java - 在Java中插入树

ruby-on-rails-3 - Rails数据库测试和清除

angularjs - 使用 Angular 数据表时如何创建 Jasmine 单元测试

arrays - 如何使用反射制作多维数组或 slice

scala - 比较 Scala 反射符号

java - 无法使用 smslib 发送消息

java - Java 中的字符串终止符

java - 我应该模拟我的测试对象与之交互的所有对象吗?

java - Reflection API 中 new Class[0] 的含义