1

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

我正在使用该assertEquals方法来查看该方法是否返回正确的双精度值。

例子:

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

但是我将如何测试该方法是否只返回一个双精度值,而不是一个特定值?

4

5 回答 5

2

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

于 2013-10-23T15:32:29.677 回答
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表示有效数字的 a(与无穷大或 NaN 相对)。

于 2013-10-23T15:19:12.897 回答
1

我假设该方法返回一些对象,你不知道确切的类型,所以只需断言一个对象是一个特定的类型Double.class

于 2013-10-23T15:19:13.217 回答
0

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

根据以下 SO 帖子(断言对象是特定类型在 JUnit 中创建 assertClass() 方法),应该这样做:

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))
于 2013-10-23T15:27:30.303 回答
0

怎么样

if(obj.someMethod("some string ") instanceof Double)
    { System.out.println("rejoice!"); }
于 2013-10-23T15:18:30.660 回答