【发布时间】:2013-11-01 23:10:01
【问题描述】:
我正在尝试测试在 java 中返回 double 的方法。
我正在使用assertEquals 方法查看该方法是否返回正确的双精度值。
示例:
assertEquals(23.5, obj.someMethod("some string "));
但是我如何测试该方法是否只返回一个双精度值,而不是一个特定的值?
【问题讨论】:
标签: java
我正在尝试测试在 java 中返回 double 的方法。
我正在使用assertEquals 方法查看该方法是否返回正确的双精度值。
示例:
assertEquals(23.5, obj.someMethod("some string "));
但是我如何测试该方法是否只返回一个双精度值,而不是一个特定的值?
【问题讨论】:
标签: java
一种方法是断言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)。
【讨论】:
一个简单的方法是用返回类型double 声明方法。你不需要测试编译器可以确保的东西。
【讨论】:
我假设该方法返回一些对象,你不知道确切的类型,所以只需 Assert an object is a specific type 和 Double.class
【讨论】:
assertTrue(true)?有什么意义?
怎么样
if(obj.someMethod("some string ") instanceof Double)
{ System.out.println("rejoice!"); }
【讨论】:
我建议使用一些额外的库来进行这些类型的断言。一方面,Junit 与 Hamcrest (https://code.google.com/p/hamcrest/wiki/Tutorial) 很好地交互以编写自定义“匹配器”,因此您可以轻松编写自己的“isSomeDouble”断言并使用它。例如,JUnit 带有一个 'assertThat' 方法,该方法将 Hamcrest Matcher 作为第二个参数。
根据以下 SO 帖子(Assert an object is a specific type 和 Creating 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))
【讨论】: