我正在尝试测试在 java 中返回 double 的方法。
我正在使用该assertEquals
方法来查看该方法是否返回正确的双精度值。
例子:
assertEquals(23.5, obj.someMethod("some string "));
但是我将如何测试该方法是否只返回一个双精度值,而不是一个特定值?
我正在尝试测试在 java 中返回 double 的方法。
我正在使用该assertEquals
方法来查看该方法是否返回正确的双精度值。
例子:
assertEquals(23.5, obj.someMethod("some string "));
但是我将如何测试该方法是否只返回一个双精度值,而不是一个特定值?
一种简单的方法是使用返回类型声明方法double
。您不需要测试编译器可以确保的东西。
一种方法是断言这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 相对)。
我假设该方法返回一些对象,你不知道确切的类型,所以只需断言一个对象是一个特定的类型Double.class
我建议使用一些额外的库来制作这些类型的断言。一方面,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))
怎么样
if(obj.someMethod("some string ") instanceof Double)
{ System.out.println("rejoice!"); }