如果方法只返回double类型的“any”值,如何进行单元测试?

时间:2013-10-23 15:15:11

标签: java

我正在尝试测试在java中返回double的方法。

我正在使用assertEquals方法查看方法是否返回正确的double值。

示例:

assertEquals(23.5, obj.someMethod("some string "));

但是我如何测试方法是否只返回一个double而不是一个特定的值?

5 个答案:

答案 0 :(得分:2)

一种方法是声明结果isNan()false

// I am assuming that the method returns java.lang.Object, so I added a cast
double res = (double)obj.someMethod("some string ");
assertFalse(Double.isNan(res));

这可确保方法返回的值为double,表示有效数字(而不是无穷大或NaN)。

答案 1 :(得分:2)

一种简单的方法是使用返回类型double声明方法。您无需测试编译器可以确保的内容。

答案 2 :(得分:1)

我假设该方法返回一些对象,您不知道确切的类型,因此只有Double.class的{​​{3}}

答案 3 :(得分:0)

怎么样

if(obj.someMethod("some string ") instanceof Double)
    { System.out.println("rejoice!"); }

答案 4 :(得分:0)

我建议使用一些额外的库来制作这些类型的断言。首先,Junit与Hamcrest(https://code.google.com/p/hamcrest/wiki/Tutorial)很好地交互以编写自定义的“匹配器”,因此您可以轻松编写自己的'isSomeDouble'断言并使用它。例如,JUnit附带一个'assertThat'方法,它将Hamcrest Matcher作为第二个参数。

根据以下SO帖子(Assert an object is a specific typeCreating a assertClass() method in JUnit),这样的事情应该这样做:

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.instanceOf;

assertThat(obj, instanceOf(Double.class)); // or assertThat(Double.valueOf(obj), instanceOf(Double.class))