2015-11-30 26 views
0

問題語句 我想獲取使用@test標記爲測試方法的方法的名稱在@before測試中。java.lang.IllegalArgumentException在獲取標記爲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 

以下是我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方法,所以我實現了上述解決方案。

任何人都可以請他們提供他們的意見,如果有什麼不正確的實施,我在這裏丟失了什麼&。

PS:我看到很多重複的問題,但沒有人報告過這個異常&因此決定提出這個問題。

+0

你確定@BeforeTest方法接受一個參數? IIRC,所有TestNG註釋的方法不會採取任何參數 – Ayman

+0

是的,這是我的不好,我以前給你的BeforeMethod正如下面的答案中指出的那樣。無論如何,謝謝@Ayman。 – palkarrohan

回答

0

你錯過了@BeforeTest@BeforeMethod。從the documentation

@BeforeTest:被註釋的方法將任何測試方法 屬於<測試內的類之前運行>標籤運行。

@BeforeMethod: 註解的方法將在每個測試方法之前運行。

你想要的是:

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

感謝@juherr,指出它。 – palkarrohan

相關問題