Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection TestNG-是否有一种轻量级(不是dataprovider,不是XML)方法在@Test和@BeforeMethods之间传递参数?_Dependency Injection_Testng - Fatal编程技术网

Dependency injection TestNG-是否有一种轻量级(不是dataprovider,不是XML)方法在@Test和@BeforeMethods之间传递参数?

Dependency injection TestNG-是否有一种轻量级(不是dataprovider,不是XML)方法在@Test和@BeforeMethods之间传递参数?,dependency-injection,testng,Dependency Injection,Testng,我正在尝试将我的测试连接到一个外部测试管理系统,以便他们可以向它报告结果。因此,每个测试方法都链接到测试数据库中的一个键 如果我有@Test方法,我可以设置一个包含键的变量,但是如果我使用@BeforeMethod,这对我没有帮助。是否有一种简单的方法可以为每个@Test提供这一个参数,并且@before方法可以为每个@Test获得相同的参数 我正在尝试这个: @BeforeMethod def startBrowser(Object[] testArgs) { println "@Be

我正在尝试将我的测试连接到一个外部测试管理系统,以便他们可以向它报告结果。因此,每个测试方法都链接到测试数据库中的一个键

如果我有@Test方法,我可以设置一个包含键的变量,但是如果我使用@BeforeMethod,这对我没有帮助。是否有一种简单的方法可以为每个@Test提供这一个参数,并且@before方法可以为每个@Test获得相同的参数

我正在尝试这个:

@BeforeMethod
def startBrowser(Object[] testArgs) {
    println "@BeforeMethod: testArgs are $testArgs"
}

@Test
def test(String testKey = "QA-123") {
    println "@Test: The testKey is $testKey"
}
但当我这样做时,我得到的输出如下所示:

@BeforeMethod: testArgs are []
@Test: The testKey is QA-123
这种方法是否有明显的问题?我的maven pom说我使用的是TestNG 6.9.10,所以我认为应该激活该功能(据我所知,它从5.9开始就是TestNG的一部分)

@BeforeMethod位于另一个文件中,因为它位于包含@test的测试类的超类中,但我认为这不会有什么区别

是因为我使用了@Test方法的默认参数吗?我试图避免使用某种类型的数据提供者或参数,因为它们似乎太重,而且面向不同的事情,比如用许多不同的数据迭代运行同一个@Test。我只想定义一段特定于@Test方法的数据,然后让@before方法知道它是什么

编辑:这似乎是我尝试使用默认参数造成的。如果我尝试使用一个非常笨重的@DataProvider,它会起作用:

@DataProvider(name = "demo")
Object[][] key() {
    return [["QA-123"]]
}


@Test(dataProvider = "demo")
void test(String zephyrKey){
    ...
}

这是可行的,但是。。。可怕的我不能为每一个测试方法创建数据提供者——它不仅麻烦,而且对于数据提供者的定义感觉完全错误。是否有更好的方法将此静态数据从测试方法传递到before方法?

您可以使用可用的@test注释属性之一,如testName或description,并在@before方法内部访问相同的属性。可能还有其他优雅的方法可以做到这一点,但这大致就是我为我们拥有的测试框架向JIRA更新结果所做的

@BeforeMethod
public void setup(final Method method) {
    final String zephyrID = method.getAnnotation(Test.class).testName();
}

@Test(testName = "zephyr_id_001")
public void test1(){
  //My test code
}

编辑:我确实检查了是否可以添加自定义注释属性,但无法执行此操作:

您所说的“可以报告结果”是什么意思?你的意思是类似于html或xml报告,但专用于您的测试管理系统?我的意思是,我希望在整个测试过程中,通过其API调用测试管理系统,包括它们的前后步骤(如果有)。因此,与测试管理系统中的测试相关的信息必须在步骤前后都可用,并且该信息与每个测试方法相关(每个测试方法映射到测试管理数据库中的一个记录)。您应该查看qaf()或allure()感谢听众汉克斯,他们已经在做同样的事情了!这看起来是可行的。事实上,我也在连接西风:)嗯。使用@BeforeMethod很容易做到这一点,因为它只是获取传入的测试方法,但是有没有一种简单的方法可以在测试方法本身中获取这些数据?我现在使用的是描述而不是testName。我一直在寻找很多关于尝试获取我当前使用的方法的资料,因为如果我像在before方法中一样访问注释,我需要这样做,但这感觉很笨拙/危险。TestNG使它变得容易吗?