java - 测试方法是否返回 double

标签 java

这是我向一群学生提出的一个问题的解释,事实证明,找到答案比我预期的要困难一些(无论如何,对我来说):

假设您要求我编写一个方法 f,它有一个 String 参数并返回一个 double。现在,您希望通过编写自己的测试代码来测试我是否正确完成了工作,如果我按照指定编写了 f,则该代码将编译,但如果没有按指定编写,则不会编译。

一些学生提出了这个错误的解决方案:

System.out.println(f("cat"));

这不是一个好的测试器,因为它不测试方法的返回类型。也就是说,即使我编写了 f 返回 String、int 或 boolean 等,它也会编译。

我向学生们提出了这个解决方案:

double d = f("cat");

我推断这会测试 f 是否接受字符串并返回 double 。但实际上,这也不好。 f 可以返回 int (或任何“更窄的”原始数据类型),结果可以存储在 d 中。

所以,我正在寻找一个简单解决方案(也许是一两行代码?)来解决这个问题:编写在 f 已正确定义的情况下可以编译的代码(字符串参数,双返回),但如果f没有按照指定的方式编写,则不会编译。

最佳答案

一般来说,反射是最适合这里的(这是一个非常不寻常的要求),但至少可以使用重载解析的其他方法是:提供带有 float 参数的替代方法,longDouble,但返回类型为 void...并且其方法的参数类型为 double和一个非 void 返回类型。然后检查您是否可以为使用 f 的结果调用该方法的结果赋值。例如:

public void foo(long x) {}
public void foo(float x) {}
public void foo(Double x) {}
public void foo(Object x) {}
public int foo(double x) {
    return 0;
}

// This will only compile if f is declared to return double
int check = foo(f("cat"));

关于java - 测试方法是否返回 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22377377/

相关文章:

java - 支柱 : Using Logic Iterate but not getting the updated list value in Action

java - 在 Java 中的 int 数组中使用单引号打印空间问题

Java:允许重复的排序集合,内存效率高并提供快速插入+更新

java - 在 drl 文件中定义集合

java - "java $SOME_ENV_VAR -jar application.jar"和 "java -jar $SOME_ENV_VAR application.jar"之间的区别

JavaFX 文本双下划线间距

java - PlayN 和兼容性

java - 如何检测代码在 Eclipse IDE 中运行

java - 在java中解析XML文件的元数据属性

java - MapBox Android SDK : How to download offline map during app installation?