【问题标题】:How to unit test if the method returns just "any" value of type double?如果该方法仅返回 double 类型的“任何”值,如何进行单元测试?
【发布时间】:2013-11-01 23:10:01
【问题描述】:

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

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

示例:

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

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

【问题讨论】:

    标签: java


    【解决方案1】:

    一种方法是断言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)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我假设该方法返回一些对象,你不知道确切的类型,所以只需 Assert an object is a specific typeDouble.class

        【讨论】:

        • 方法返回double类型的值
        • @TokugawaIeysu 你什么时候要断言?如果它声明为返回双精度,那么它怎么能返回其他任何东西?所以基本上你只想要assertTrue(true)?有什么意义?
        【解决方案4】:

        怎么样

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

        【讨论】:

          【解决方案5】:

          我建议使用一些额外的库来进行这些类型的断言。一方面,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))
          

          【讨论】:

            猜你喜欢
            • 2011-06-25
            • 1970-01-01
            • 2014-05-10
            • 2011-06-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-18
            • 1970-01-01
            相关资源
            最近更新 更多