拓展阅读

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 依赖

org.testng

testng

7.3.0

test

测试类,和 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。

以下是一些原因:

更灵活的测试配置: TestNG 提供了更灵活的测试配置选项,可以通过 XML 文件进行配置,允许开发人员更细粒度地控制测试的执行方式,包括并发测试、测试组、测试套件等。 注解的丰富性: TestNG 提供了更多的注解,例如 @BeforeSuite、@AfterSuite、@BeforeTest、@AfterTest 等,使测试方法的组织更加灵活。TestNG 的注解支持更丰富的测试生命周期管理。 参数化测试: TestNG 提供了更强大的参数化测试支持,通过 @DataProvider 注解,可以更轻松地实现数据驱动测试。 依赖测试: TestNG 具有更强大的依赖测试支持,可以通过 dependsOnMethods 或 dependsOnGroups 属性指定测试方法之间的依赖关系,确保测试方法按照指定的顺序执行。 测试分组和套件: TestNG 提供了更灵活的测试分组和测试套件功能,可以按照不同的维度组织测试,更容易管理和执行特定组的测试。 并发测试: TestNG 内置支持并发测试,可以配置测试套件中的测试以并行执行,提高测试效率。 监听器支持: TestNG 提供了丰富的监听器接口,可以通过实现这些接口定制测试执行期间的行为,例如,在测试开始或结束时执行一些操作。 软断言(Soft Assertions): TestNG 支持软断言,即使在断言失败时,测试方法仍然会继续执行,方便查看所有断言失败的情况。 跳过测试: TestNG 允许在测试方法上使用 @Test(enabled = false) 来标记测试方法为禁用状态,而不需要注释掉整个方法。

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

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

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: