java.lang.IllegalArgumentException获取在before方法中标记为test(使用@test)的方法的名称

时间:2015-11-30 10:49:25

标签: java dependency-injection testng

问题陈述 我想获得在@before测试中使用@test标记为测试方法的方法的名称。

经过研究,我找到了一个解决方案&以下是我的实施:

import java.lang.reflect.Method;
import org.testng.annotations.*;

public class myTestClass {

    @BeforeSuite
    public void configureEnvironment(){
         // does some basic tasks
    }

    @BeforeTest
    public void configureTest(Method m){
         System.out.println("Test Case Name : "+m.getName());
    }

    @Test
    public void TestABC(){}

    @Test 
    public void TestXYZ(){}

    @AfterTest
    public void testCleanUp(){
        //performs test clean up activities
    }
}

PS:它是用于解释目的的输入代码&因此请忽略任何语法错误。

我期待以下输出 ::

Test Case Name : TestABC
Test Case Name : TestXYZ

以下是我的 testng xml ::

<?xml version="1.0" encoding="UTF-8"?>
 <suite name="My_Test_Suite" parallel="false">
 <test name="My_TESTS">
    <classes>
      <class name="myPackage.myTestClass" />
    </classes> 
  </test> 
</suite> 

但是我得到以下异常 ::

FAILED CONFIGURATION: @BeforeTest configureTest
java.lang.IllegalArgumentException: wrong number of arguments
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:510)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:211)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
    at org.testng.TestRunner.beforeRun(TestRunner.java:647)
    at org.testng.TestRunner.run(TestRunner.java:615)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
    at org.testng.TestNG.run(TestNG.java:1018)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:112)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:176)

根据TestNG文档,这是一个本机依赖注入,其中信息由testng或dataprovider注入。由于我想使用testng方法,我已经实现了上述解决方案。

任何人都可以提供他们的意见,我在这里错过了什么&amp;如果有任何不正确的实施。

PS:我看过许多重复的问题,但没有人报告此异常&amp;因此决定提出这个问题。

1 个答案:

答案 0 :(得分:0)

您错过了@BeforeTest@BeforeMethod。来自the documentation

  

@BeforeTest:带注释的方法将在任何测试方法之前运行   属于&lt; test&gt;内的类标签运行。

     

@BeforeMethod:   带注释的方法将在每个测试方法之前运行。

你想要的是:

@BeforeMethod
public void configureTest(Method m){
     System.out.println("Test Case Name : "+m.getName());
}