Java JUnit测试方法可以';不返回值

Java JUnit测试方法可以';不返回值,java,junit,Java,Junit,为什么JUnit测试方法不能返回值 说(强调我的): 测试方法和生命周期方法可以在当前测试类中本地声明、从超类继承或从接口继承(请参见测试接口和默认方法)此外,测试方法和生命周期方法不能是抽象的,也不能返回值 为什么要这样强制执行 这纯粹是一种设计选择吗?这是一种最佳实践吗?您可以编写一些私有方法并像这样重用它们 @Test public void test1() { privateTest(); } @Test public void test2() { privateTes

为什么JUnit测试方法不能返回值

说(强调我的):

测试方法和生命周期方法可以在当前测试类中本地声明、从超类继承或从接口继承(请参见测试接口和默认方法)此外,测试方法和生命周期方法不能是抽象的,也不能返回值

为什么要这样强制执行


这纯粹是一种设计选择吗?这是一种最佳实践吗?

您可以编写一些私有方法并像这样重用它们

@Test
public void test1() {
    privateTest();
}

@Test
public void test2() {
    privateTest();
//    more Logic

}

private int privateTest() {
   return 0;
}

您可以编写一些私有方法并像这样重用它们

@Test
public void test1() {
    privateTest();
}

@Test
public void test2() {
    privateTest();
//    more Logic

}

private int privateTest() {
   return 0;
}

应执行测试方法

如果测试不能独立运行,那么它们就不是单元测试

单元测试不应依赖于任何外部状态

若试验方法将返回一个值,则试验结果应用于/与其他试验相关

相同的最佳实践

因为TestNG遵循单元测试的最佳实践,这意味着单元测试方法不应该有返回值


应执行测试方法

如果测试不能独立运行,那么它们就不是单元测试

单元测试不应依赖于任何外部状态

若试验方法将返回一个值,则试验结果应用于/与其他试验相关

相同的最佳实践

因为TestNG遵循单元测试的最佳实践,这意味着单元测试方法不应该有返回值

这背后的原因是什么

将每个测试方法看作是经典Java应用程序中的
公共静态void main(String[])
方法的逻辑模拟。需要有一个众所周知的方法签名,以便JUnit框架能够识别测试方法,并以标准方式调用它们

关于您查询的具体设计点:

  • 方法不能抽象的原因是它们需要可调用。不能调用抽象方法

  • 方法无法返回值的原因是测试框架无法使用返回值执行任何有用的操作。(丢弃任何结果不是不可能的,但是不能使用的测试用例结果有什么意义?)

我在想也许我们可以在另一种测试方法中重复使用一种测试方法

如果您想在单元测试中重用代码,您只需要使用普通方法和Java的其他OO特性;e、 基类、助手类等等。很少有情况下,您需要一个独立的测试方法和另一个测试方法的“组件”(因为缺少更好的词)。如果你写了,你可以写这样的东西

    public void test_xxx() {
        real_test_xxx();
    }

    public int real_test_xxx() {
         ...
    }

    public void test_yyy() {
          ...
          res = real_test_xxx()
          ...
    }
这纯粹是一种设计选择吗?这是最佳实践吗

这些是由单元测试1的一般要求和实用性指导的设计选择。特别是,单元测试作者不需要构建配置来告诉测试框架该做什么

请注意,TestNG采用了类似的方法。如果TestNG
@Test
方法声明为返回值,则不将其视为测试方法;看

无论如何,除非您打算实现另一个Java测试框架,否则这都是毫无意义的


1-如果有强烈的实际理由需要抽象测试方法或返回值的测试方法,那么有人会对此做些什么。大量的(单元测试作者)会站起来推翻(测试框架开发人员的)专制政权。(世卫组织重新发布了该报告。)

这背后的原因是什么

将每个测试方法看作是经典Java应用程序中的
公共静态void main(String[])
方法的逻辑模拟。需要有一个众所周知的方法签名,以便JUnit框架能够识别测试方法,并以标准方式调用它们

关于您查询的具体设计点:

  • 方法不能抽象的原因是它们需要可调用。不能调用抽象方法

  • 方法无法返回值的原因是测试框架无法使用返回值执行任何有用的操作。(丢弃任何结果不是不可能的,但是不能使用的测试用例结果有什么意义?)

我在想也许我们可以在另一种测试方法中重复使用一种测试方法

如果您想在单元测试中重用代码,您只需要使用普通方法和Java的其他OO特性;e、 基类、助手类等等。很少有情况下,您需要一个独立的测试方法和另一个测试方法的“组件”(因为缺少更好的词)。如果你写了,你可以写这样的东西

    public void test_xxx() {
        real_test_xxx();
    }

    public int real_test_xxx() {
         ...
    }

    public void test_yyy() {
          ...
          res = real_test_xxx()
          ...
    }
这纯粹是一种设计选择吗?这是最佳实践吗

这些是由单元测试1的一般要求和实用性指导的设计选择。特别是,单元测试作者不需要构建配置来告诉测试框架该做什么

请注意,TestNG采用了类似的方法。如果TestNG
@Test
方法声明为返回值,则不将其视为测试方法;看

无论如何,除非您打算实现另一个Java测试框架,否则这都是毫无意义的



1-如果有强烈的实际理由需要抽象测试方法或返回值的测试方法,那么有人会对此做些什么。大量的(单元测试作者)会站起来推翻(测试框架开发人员的)专制政权。(世界卫生组织重播了。)

我还没有看到提到的一件事是