test-03-java 单元测试框架 testNG 入门介绍 junit/junit5/testNG 详细对比

拓展阅读

test-01-java 单元测试框架 junit 入门介绍

test-02-java 单元测试框架 junit5 入门介绍

test-03-java 单元测试框架 testNG 入门介绍 junit/junit5/testNG 详细对比

test assert-01-Google Truth 断言

test 系统学习-03-TestNG Spock testng 入门使用教程

开源推荐

sensitive-word 敏感词开源工具使用入门

testNG 的入门案例,包含 maven 引入

maven 依赖

<dependencies>
    
    <dependency>
        <groupId>org.testnggroupId>
        <artifactId>testngartifactId>
        <version>7.3.0version>
        <scope>testscope>
    dependency>
dependencies>

测试类,和 junit 差不多:

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestNGExampleTest {

    @Test
    public void testAddition() {
        // 测试相加方法
        int result = add(2, 3);

        // 使用断言验证结果
        Assert.assertEquals(result, 5, "Addition failed: Expected 5, but got " + result);
    }

    @Test
    public void testSubtraction() {
        // 测试相减方法
        int result = subtract(5, 3);

        // 使用断言验证结果
        Assert.assertTrue(result > 0, "Subtraction failed: Expected result to be greater than 0");
    }

    private int add(int a, int b) {
        // 实际的相加方法
        return a + b;
    }

    private int subtract(int a, int b) {
        // 实际的相减方法
        return a - b;
    }
}

为什么已经有 junit4 了,还会有 testNG 呢?

JUnit 4 和 TestNG 都是用于Java应用程序测试的流行测试框架,它们有一些相似之处,但也有一些不同之处,导致在某些情况下选择使用 TestNG。

以下是一些原因:

  1. 更灵活的测试配置: TestNG 提供了更灵活的测试配置选项,可以通过 XML 文件进行配置,允许开发人员更细粒度地控制测试的执行方式,包括并发测试、测试组、测试套件等。

  2. 注解的丰富性: TestNG 提供了更多的注解,例如 @BeforeSuite@AfterSuite@BeforeTest@AfterTest 等,使测试方法的组织更加灵活。TestNG 的注解支持更丰富的测试生命周期管理。

  3. 参数化测试: TestNG 提供了更强大的参数化测试支持,通过 @DataProvider 注解,可以更轻松地实现数据驱动测试。

  4. 依赖测试: TestNG 具有更强大的依赖测试支持,可以通过 dependsOnMethodsdependsOnGroups 属性指定测试方法之间的依赖关系,确保测试方法按照指定的顺序执行。

  5. 测试分组和套件: TestNG 提供了更灵活的测试分组和测试套件功能,可以按照不同的维度组织测试,更容易管理和执行特定组的测试。

  6. 并发测试: TestNG 内置支持并发测试,可以配置测试套件中的测试以并行执行,提高测试效率。

  7. 监听器支持: TestNG 提供了丰富的监听器接口,可以通过实现这些接口定制测试执行期间的行为,例如,在测试开始或结束时执行一些操作。

  8. 软断言(Soft Assertions): TestNG 支持软断言,即使在断言失败时,测试方法仍然会继续执行,方便查看所有断言失败的情况。

  9. 跳过测试: TestNG 允许在测试方法上使用 @Test(enabled = false) 来标记测试方法为禁用状态,而不需要注释掉整个方法。

junit/junit5/testNG 等常见 java 测试框架的对比

功能/特性 JUnit 4 JUnit 5 TestNG
注解 @Test, @Before, @After, @Ignore, etc. @Test, @BeforeEach, @AfterEach, @BeforeAll, @AfterAll, etc. @Test, @BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, etc.
参数化测试 使用 @Parameters 注解 支持参数化测试方法,通过 @ParameterizedTest@ValueSource 等注解 支持参数化测试方法,通过 @Parameters 注解
断言 使用 JUnit 提供的 Assert 使用 JUnit 5 提供的 Assertions 使用 TestNG 提供的 Assert
测试生命周期 单一测试生命周期(@Before@After在每个测试方法前后执行) 更灵活的测试生命周期,可以使用 @BeforeEach@AfterEach@BeforeAll@AfterAll 更灵活的测试生命周期,支持 @BeforeSuite@AfterSuite@BeforeTest@AfterTest
依赖测试 通过方法名指定依赖关系 使用 dependsOnMethods 属性指定测试方法的依赖关系 使用 dependsOnMethodsdependsOnGroups 属性指定测试方法或测试组之间的依赖关系
并发测试 不直接支持并发测试 支持并发测试,可以配置测试类或测试方法并发执行 支持并发测试,可以在测试套件或测试方法级别设置并发数
测试分组 通过命名规则或自定义注解进行分组 使用 @Tag 注解进行分组 使用 @Test(groups = "groupname") 进行分组
测试套件 不直接支持测试套件 使用 @RunWith 注解和 @Suite 注解支持测试套件 支持通过 XML 文件配置测试套件
数据驱动测试 通常通过参数化测试实现 支持参数化测试和动态测试(通过 @TestFactory 实现) 支持数据驱动测试,通过 @DataProvider 注解提供测试数据
监听器 通过实现 TestWatcher 接口等实现 支持扩展 TestExecutionListener 接口和 @ExtendWith 注解 提供了丰富的监听器接口,通过实现这些接口实现监听功能
报告生成 需要依赖第三方插件,如 Ant 或 Maven 插件 支持通过插件生成报告,如 Maven Surefire 插件 自动生成详细的 HTML 报告
软断言 不支持软断言 不支持软断言,但可以通过异常处理实现类似的效果 支持软断言,即使在断言失败时,测试方法仍然会继续执行
开发者社区 巨大且成熟 正在逐渐增长,对于新项目可能还没有 JUnit 4 大 成熟且广泛使用,拥有强大的社区支持

test-03-java 单元测试框架 testNG 入门介绍 junit/junit5/testNG 详细对比_第1张图片

你可能感兴趣的:(test,java,单元测试,junit,unit,testing)