Java 注释 -- 此代码中发生了什么?

Java Annotations -- What is Happening In This Code?

我是一个经验中等的 Java 编码员,我从来没有完全围绕 Java 注释。我已经通读了几次文档并逐步浏览了在线示例,并且我理解了基本概念:注释本质上是代码的元数据。

现在我的老板让我看一下 Java 另一位已离开我们公司的员工编写的代码。这是最重要的方法:

public XSSFWorkbook  myExcelWorkbook;
public XSSFSheet     myExcelSheet;
public Object        data = null;

@DataProvider(name = "GetConfigData")
public Object GetExcelData() throws IOException {
    try {
        ExcelUtility utility = new ExcelUtility();
        myExcelSheet = utility.getSheet(myExcelWorkBook, "CONFIG_DETAILS");
        data = utility.readDataToList(myExcelSheet);
    } catch (Exception e) {
        log.error("ERROR DETAILS: " + e.getMessage());
    }
    return data;
}

因此,此方法会打开一个 Excel 电子表格,读取它,并分析数据以供稍后在程序中使用。我明白这里的一切...

...除了 @DataProvider(name = "GetConfigData") 部分。我不认为它只是对像我这样的人 reader 有用的信息。我怀疑它以某种方式操纵代码,但我不确定是如何操纵的。

更神秘:当我对“DataProvider”或“GetConfigData”进行文本搜索时,我什么也没找到。

此外,当我在 GetExcelData() 上执行“打开调用层次结构”时(我在 Eclipse 中工作),我找不到另一个调用 Get[=30= 的方法]数据()。但是 GetExcelData() 显然在代码运行时被调用。注释是否可以解释如何?

我意识到这只是一个代码片段,可能没有足够的信息来完整回答我的问题。但我希望有人可以解释注释行在这里扮演的具体角色。提前谢谢你,-RAO

But GetExcelData() is clearly being invoked when the code runs. Would the Annotations possibly explain how?

是的。

注解导致框架将该方法识别为数据提供者。

这就是您期望测试框架正确执行的操作 - 抽象出所有测试所需的通用功能 运行。测试通常是数据驱动的,这就是 @DataProvider 注释试图解决的问题。它将 Java 方法标识为向测试提供数据。注释告诉 TestNG 框架,Object[x][y] 被 returned,需要 运行 @Test 方法用 y 数据注释测试用例 x 次。

您在文本搜索中找不到@DataProvider 的原因是因为@DataProvider 正在被 TestNG 代码使用 - 您可以在 TestNG 的代码中进行 DataProvider 文本搜索以找到实现。名称“GetConfigData”理想情况下应该 return 某个名称,如果没有,则意味着没有测试正在使用它,然后可以安全地删除数据提供程序。