TestNG中@BeforeMethod结合@DataProvider时未执行问题咨询
TestNG @BeforeMethod未执行问题排查
问题描述
我是TestNG新手,搭建了一个简单的测试环境:测试类继承Base类,数据注入正常,但Base类中带@BeforeMethod注解的setup方法完全未执行。已尝试添加alwaysRun=true(因未使用分组,无变化符合预期),且未配置testng.xml(认为基础场景无需配置)。请问为何setup方法未在测试执行前被调用?
测试类代码
public class TestcaseClass extends Base{ @JsonSource(files = {"test.json"}) //指定要加载的文件 @Test(dataProvider = "json", dataProviderClass = JsonData.class) public void testcase_01(MyDataClass myDataClass){ myDataclass.getName(); //执行成功 } }
Base类代码
@BeforeMethod public void setup() { Log.info("setupMethod"); doSomething(); }
排查方向及解决方案
检查注解导入是否正确
确认Base类的@BeforeMethod和测试类的@Test都是TestNG包下的:org.testng.annotations.BeforeMethod、org.testng.annotations.Test。新手很容易不小心导入JUnit的同名注解,导致TestNG无法识别,自然不会触发前置方法。确认方法和类的访问权限
确保Base类的setup方法是public修饰(你的代码里已经满足),且Base类不是final类(否则无法被继承),这些基础权限问题会导致注解逻辑不生效。升级TestNG版本
如果使用的TestNG版本过旧,可能存在注解继承的兼容性bug,建议升级到7.x系列的稳定版本,很多旧版本的小问题在新版本中已经修复。检查IDE运行配置
如果你用IDE(比如IDEA、Eclipse)运行测试,要确认运行配置是TestNG类型。比如IDEA右键运行时,要选择"Run 'TestcaseClass' with TestNG",而不是误选了JUnit的运行配置,否则会用JUnit的规则执行,不会触发TestNG的前置方法。
内容的提问来源于stack exchange,提问作者Krwasch
相关产品推荐
相关产品推荐

