如何为给定Java Stack类编写带@BeforeTest等注解的TestNG测试用例
针对Stack类的TestNG测试用例实现
前置说明
你需要先引入TestNG依赖,如果你用Maven的话,pom.xml添加如下依赖(Gradle项目对应调整配置即可):
<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.7.1</version> <scope>test</scope> </dependency>
测试注解作用说明
你要求用到的四个注解的执行顺序和作用如下:
@BeforeTest:TestNG测试套件中标签下所有测试类运行前仅执行1次,适合做套件级别的初始化操作 @BeforeClass:当前测试类所有测试方法运行前仅执行1次,适合做类级别的全局资源初始化@BeforeMethod:每个测试方法运行前都会执行1次,用来重置测试对象,保证不同测试用例之间的环境隔离@AfterClass:当前测试类所有测试方法运行完成后仅执行1次,用来释放类级别占用的资源
完整测试代码
package au.com.junitpractice; import org.testng.Assert; import org.testng.annotations.*; public class StackTest { // 声明测试对象,每个测试方法使用的栈会在@BeforeMethod里完成初始化 private Stack stack; @BeforeTest public void beforeTest() { System.out.println("===== Stack模块测试开始 ====="); // 此处可放置测试套件级别的初始化逻辑,比如加载全局测试配置 } @BeforeClass public void beforeClass() { System.out.println("StackTest测试类执行开始,所有测试用例即将运行"); // 此处可放置类级别的一次性初始化逻辑,比如读取测试用例数据文件 } @BeforeMethod public void beforeMethod() { // 每个测试方法执行前都新建一个全新的栈,避免用例之间互相影响 stack = new Stack(); System.out.println("单个测试用例执行环境初始化完成"); } @Test(description = "验证空栈初始状态是否正确") public void testEmptyStack() { Assert.assertEquals(stack.getSize(), 0); Assert.assertEquals(stack.getMax(), 0); } @Test(description = "验证单元素push操作的正确性") public void testPushSingleElement() { stack.push(5); Assert.assertEquals(stack.getSize(), 1); Assert.assertEquals(stack.getMax(), 5); } @Test(description = "验证多元素push后最大值计算的正确性") public void testPushMultipleElementsMax() { stack.push(3); stack.push(7); stack.push(2); Assert.assertEquals(stack.getSize(), 3); Assert.assertEquals(stack.getMax(), 7); } @Test(description = "验证pop操作的返回值和栈状态正确性") public void testPopOperation() { stack.push(4); stack.push(9); int popVal = stack.pop(); Assert.assertEquals(popVal, 9); Assert.assertEquals(stack.getSize(), 1); Assert.assertEquals(stack.getMax(), 4); } @Test(description = "验证栈元素全部pop后状态回滚是否正确") public void testPopAllElements() { stack.push(6); stack.push(8); stack.pop(); stack.pop(); Assert.assertEquals(stack.getSize(), 0); Assert.assertEquals(stack.getMax(), 0); } @Test(description = "验证连续push pop场景下最大值的正确性") public void testContinuousPushPopMax() { stack.push(5); stack.push(10); stack.push(7); Assert.assertEquals(stack.getMax(), 10); stack.pop(); Assert.assertEquals(stack.getMax(), 10); stack.pop(); Assert.assertEquals(stack.getMax(),5); } @AfterClass public void afterClass() { System.out.println("StackTest测试类所有用例执行完成"); // 此处可放置类级别资源释放逻辑,比如关闭文件流、数据库连接 } }
执行顺序验证
运行测试后可以看到控制台输出的执行顺序符合预期:@BeforeTest -> @BeforeClass -> [每个方法前执行@BeforeMethod -> 执行测试方法] * N -> @AfterClass
内容的提问来源于stack exchange,提问作者Mashhood
相关产品推荐
相关产品推荐

