You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TestNG数据驱动测试被跳过,DP.java存在未检查/不安全操作问题

问题描述

运行TestNG数据驱动测试时,测试被跳过,编译提示DP.java uses unchecked or unsafe operations,需用-Xlint:unchecked重新编译查看详情。相关代码及Gradle执行日志如下:

测试类YourTestClass代码

public class YourTestClass {
WebDriver driver; // 需要初始化WebDriver

@Test(dataProvider = "data-provider",enabled=true,dataProviderClass = DP.class)
public void verifyUser_registration_login_logout_test(Method method,String UserName, String Password){
    Assertion assertion = new Assertion();
    try{
    HomePage homePage = new HomePage(driver);
    homePage.navigateToHomePage();
    RegisterPage registerPage = new RegisterPage(driver);
    registerPage.navigateToRegisterPage();
    registerPage.verifyRegisterPage();
    registerPage.performRegister(UserName,Password);
    LoginPage loginPage = new LoginPage(driver);
    loginPage.performLogin(UserName,Password);
    homePage.verifyUserLoggedIn(UserName);
    homePage.clickOnLogoutButton();
    WebDriverWait wait = new WebDriverWait(driver, 30);
    driver.navigate().refresh();
    wait.until(ExpectedConditions.urlToBe("SOMEURL"));
    homePage.verifyUserLoggedOut();
}catch(Exception e){
    logStatus("Page test", "navigation to registration page", "failed");
        e.printStackTrace();
   }
}   

数据提供类DP代码

public class DP {
static String excelPath = "app/src/test/resources/DatasetsSOMEURL.xlsx";

public DP(String excelPath) {
    DP.excelPath = excelPath;
}

@DataProvider(name = "data-provider")
public static Object[][] dataProviderMethod(Method method) throws IOException {
    int rowIndex = 0;
    int cellIndex = 0;
    List<List> outputList = new ArrayList<List>();
    FileInputStream excelFile = new FileInputStream(new File(excelPath));

    try (Workbook workbook = new XSSFWorkbook(excelFile)) {
        Sheet selectedSheet = workbook.getSheet(method.getName());
        Iterator<Row> iterator = selectedSheet.iterator();

        while (iterator.hasNext()) {
            Row nextRow = iterator.next();
            Iterator<Cell> cellIterator = nextRow.cellIterator();
            List<String> innerList = new ArrayList<String>();

            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();

                if (rowIndex > 0 && cellIndex > 0) {
                    String cellValue = "";

                    switch (cell.getCellType()) {
                        case STRING:
                            cellValue = cell.getStringCellValue();
                            break;
                        case NUMERIC:
                            cellValue = String.valueOf(cell.getNumericCellValue());
                            break;
                        default:
                            throw new UnsupportedOperationException("Unsupported Cell Type: " + cell.getCellType());
                    }

                    innerList.add(cellValue);
                }

                cellIndex++;
            }

            if (!innerList.isEmpty()) {
                outputList.add(innerList);
            }

            rowIndex++;
        }
    }

    Object[][] data = new Object[outputList.size()][];
    for (int i = 0; i < outputList.size(); i++) {
        data[i] = outputList.get(i).toArray(new String[0]);
    }

    return data;
}
}

Gradle执行日志

Task :app:test
Gradle Test Executor 1 STANDARD_ERROR
log4j:WARN No appenders could be found for logger (org.testng.internal.Graph).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
.tests.testCase_01 > verifyUser_registration_login_logout_test SKIPPED
TEST SUMMARY: RAN 1 TESTS, 0 SUCCEEDED, 0 FAILED, 1 SKIPPED

解决方案

1. 消除unchecked编译警告

DP类中使用了未指定泛型的原始类型List<List>,修改为明确的泛型声明:

List<List<String>> outputList = new ArrayList<>();

同时在Gradle配置中添加-Xlint:unchecked参数,查看完整警告信息:
在build.gradle中添加:

tasks.withType(JavaCompile) {
    options.compilerArgs << "-Xlint:unchecked"
}

2. 修复测试跳过问题

编译警告通常不会直接导致测试跳过,重点排查以下点:

  • 确认Excel文件路径正确且文件存在;Sheet名称必须与测试方法名verifyUser_registration_login_logout_test完全匹配
  • 检查Excel数据:代码仅读取rowIndex>0且cellIndex>0的单元格,确保对应行/列有有效数据,若outputList为空,TestNG会跳过测试
  • 初始化WebDriver:YourTestClass中的driver字段未初始化,需在测试前完成初始化(如用@BeforeMethod注解)
  • 捕获数据提供器异常:在dataProviderMethod中添加异常处理,避免因Excel读取失败导致测试跳过

3. 解决log4j警告

在src/test/resources目录下创建log4j.properties文件,添加基础配置:

log4j.rootLogger=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

内容的提问来源于stack exchange,提问作者Anjani Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:53:16