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 某个名称,如果没有,则意味着没有测试正在使用它,然后可以安全地删除数据提供程序。
我是一个经验中等的 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 某个名称,如果没有,则意味着没有测试正在使用它,然后可以安全地删除数据提供程序。