java - 为什么 JUnit 测试方法需要无效?

标签 java junit

我在很多地方读到测试方法应该/必须是 void,但没有人说这是什么原因。

我在 MethodValidator 中找到以下检查没有注释/javadocs。

    if (each.getReturnType() != Void.TYPE) {
        errors.add(new Exception("Method " + each.getName()
                + " should be void"));
    }

那么为什么它应该是 void

最佳答案

问你一个相反的问题:为什么 JUnit 测试方法需要不是 void
没有原因:因为测试方法不是为了返回将被客户端类利用的结果而设计的。
单元测试的目标是验证某些断言。测试运行器调用测试方法,这是解释任何断言失败或在测试执行期间抛出的任何异常以产生测试结果的运行器。

我们可能想知道为什么测试不返回断言结果。
但这是一个坏主意,因为编写单元测试会非常麻烦:

@Test
public AssertionResult foo(){
   Bar actualBar = foo.doThat(...);
   if (actualBar == null){
       return AssertionResult.fail("actualBar == null");
   }
}

写这样的东西真的是可读性和直截了当的:

@Test
public void foo(){
   Bar actualBar = foo.doThat(...);
   Assert.assertNotNull(actualBar);
}

我们也想知道为什么测试方法不能被其他测试方法调用,例如:

@Test
public int foo(){
   Bar actualBar = foo.doThat(...);
   //...
   return intValue;
}

@Test
public void fooWithComputedInt(){
   Bar actualBar = foo.doThat(foo());
   //...
}

但这也不是一个好主意,因为这会耦合测试执行,而单元测试执行必须与其他测试隔离。而且它还会使测试被执行多次,单元测试必须尽快执行。

所以除了 void 之外,让测试方法返回其他东西真的没有任何值(value)。

关于java - 为什么 JUnit 测试方法需要无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51578581/

相关文章:

java - 如何解决 "arguments are different"错误 - 单元测试

java - 测试Spring onApplicationEvent的简单方法

java - Spring的JUnit测试加载ApplicationContext失败

java - 正则表达式允许单个下划线和连字符不在开头或结尾

java - n 层应用程序和辅助类

java - 编写用于在 sftp 服务器中合并文件的 Junit 测试用例

java - JUnit 混淆 : use 'extends TestCase' or '@Test' ?

java - Hibernate 的 Tomcat 6 类加载器泄漏

java - 从数组创建的字符串不断返回 null

java - Webdriver:我无法自动化 slider