gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:59:57 24 4
gpt4 key购买 nike

我在很多地方读到测试方法应该/必须是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com