Hello,
I wonder if I discovered a bug in the way Testng handles @Optional
parameters. I reproduced this with v5.12 and 5.12.1. Here is 5.12.
testng.xml file:
==================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "
http://testng.org/testng-1.0.dtd" >
<suite name="Parameters">
<test name="OptionalParameterFails">
<classes>
<class name="OptionalParameterFails"></class>
</classes>
</test>
</suite>
==================================================
Class:
==================================================
public class OptionalParameterFails {
@Parameters("optional")
public OptionalParameterFails(@Optional String optional) {
// never gets executed
}
}
==================================================
Stack trace:
==================================================
org.testng.TestNGException:
An error occurred while instantiating class OptionalParameterFails:
null
at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:
329)
at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:
71)
at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:90)
at
org.testng.internal.TestNGClassFinder.<init>(TestNGClassFinder.java:
119)
at org.testng.TestRunner.initMethods(TestRunner.java:305)
at org.testng.TestRunner.init(TestRunner.java:251)
at org.testng.TestRunner.init(TestRunner.java:221)
at org.testng.TestRunner.<init>(TestRunner.java:183)
at org.testng.remote.RemoteTestNG$1.newTestRunner(RemoteTestNG.java:
105)
at org.testng.remote.RemoteTestNG
$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG.java:158)
at org.testng.SuiteRunner
$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:551)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
at org.testng.SuiteRunner.run(SuiteRunner.java:195)
at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:903)
at org.testng.TestNG.runSuitesLocally(TestNG.java:872)
at org.testng.TestNG.run(TestNG.java:780)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:75)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:127)
Caused by: java.lang.NullPointerException
at
org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:
23)
at org.testng.internal.ClassHelper.createInstance(ClassHelper.java:
276)
... 17 more
==================================================
What's going wrong? If I provide a value (@Optional("defaulValue")),
it works...
According to the @Optional javadoc:
/** Specifies that the current parameter is optional. TestNG will
pass
* in a specified default value, or <code>null</code> if none is
specified.
*/
Any help welcome :)
Yves Dessertine