在方法前获取标记为test的方法名时出现java.lang.IllegalArgumentException(使用@test)。

问题描述 投票:0回答:1

问题陈述我想通过@before test中的@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

* 以下是我的 测试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:我看到了很多重复的问题,但是没有人报告这个异常&因此决定把这个问题归档。

java dependency-injection testng
1个回答
0
投票

你配错了 @BeforeTest@BeforeMethod. 从 文件:

@BeforeTest。注释的方法将在属于<test> 标签内的类的任何测试方法运行之前运行。

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

你想要的是

@BeforeMethod
public void configureTest(Method m){
     System.out.println("Test Case Name : "+m.getName());
}
© www.soinside.com 2019 - 2024. All rights reserved.