Skip to content

TestNg Not able to find method annotated with @DataProvider even though it is there #3247

@ShubhamAgarwalGit

Description

@ShubhamAgarwalGit

Hi Everyone
I am facing some testng issues when I have upgraded my testng version to 7.8.0 (7.5 was stable for me)

Issue I am facing

Exception in thread "main" org.testng.TestNGException:
Method public java.lang.Object[] org.example.testngissue.nonWorkingCode.DataDrivenFactoryParent.factoryMethod(java.util.Map) requires a '@dataProvider' named : mapDataProvider in class org.example.testngissue.nonWorkingCode.InputDataProvider

Refrence repo

https://github.com/ShubhamAgarwalGit/testNgIssue.git

Issue Explanation

Scenario-1

Even though I have a expected 'factoryMethod' annotated with @dataProvider and name = "mapDataProvider" in expected class "org.example.testngissue.nonWorkingCode.InputDataProvider" testng is not able to find it . Please refer directory "org.example.testngissue.nonWorkingCode" in order to reproduce issue

Scenario-2

However when we move same '@dataProvider' annotated method into the class containing 'factoryMethod' my code is working .
Hence for more clarity I have added the working code under package "org.example.testngissue.workingCode" for your reference.

My Expectation

testNg should work in Scenario-1 like Scenario-2

Scenario-1 logs (issue)

18:52:48.231 [main] INFO org.example.testngissue.nonWorkingCode.NonWorkingCodeMainClass -- --- Generated TestNG XML ---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="FactorySuite">
  <test thread-count="5" name="FactoryTest">
    <classes>
      <class name="org.example.testngissue.nonWorkingCode.DataDrivenFactoryChild"/>
    </classes>
  </test> <!-- FactoryTest -->
</suite> <!-- FactorySuite -->

Exception in thread "main" org.testng.TestNGException: 
Method public java.lang.Object[] org.example.testngissue.nonWorkingCode.DataDrivenFactoryParent.factoryMethod(java.util.Map) requires a @DataProvider named : mapDataProvider in class org.example.testngissue.nonWorkingCode.InputDataProvider
	at org.testng.internal.Parameters.findDataProvider(Parameters.java:526)
	at org.testng.internal.Parameters.handleParameters(Parameters.java:763)
	at org.testng.internal.FactoryMethod.invoke(FactoryMethod.java:160)
	at org.testng.internal.TestNGClassFinder.processFactory(TestNGClassFinder.java:174)
	at org.testng.internal.TestNGClassFinder.processMethod(TestNGClassFinder.java:138)
	at org.testng.internal.TestNGClassFinder.processClass(TestNGClassFinder.java:129)
	at org.testng.internal.TestNGClassFinder.<init>(TestNGClassFinder.java:67)
	at org.testng.TestRunner.initMethods(TestRunner.java:461)
	at org.testng.TestRunner.init(TestRunner.java:356)
	at org.testng.TestRunner.init(TestRunner.java:309)
	at org.testng.TestRunner.<init>(TestRunner.java:184)
	at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:652)
	at org.testng.SuiteRunner.init(SuiteRunner.java:224)
	at org.testng.SuiteRunner.<init>(SuiteRunner.java:116)
	at org.testng.TestNG.createSuiteRunner(TestNG.java:1375)
	at org.testng.TestNG.createSuiteRunners(TestNG.java:1349)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1191)
	at org.testng.TestNG.runSuites(TestNG.java:1114)
	at org.testng.TestNG.run(TestNG.java:1082)
	at org.example.testngissue.nonWorkingCode.NonWorkingCodeMainClass.main(NonWorkingCodeMainClass.java:35)

Scenario-2 logs (working code logs)

19:06:01.577 [main] INFO org.example.testngissue.workingCode.WorkingCodeMainClass -- --- Generated TestNG XML ---
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="FactorySuite">
  <test thread-count="5" name="FactoryTest">
    <classes>
      <class name="org.example.testngissue.workingCode.DataDrivenFactoryChild"/>
    </classes>
  </test> <!-- FactoryTest -->
</suite> <!-- FactorySuite -->

19:06:01.669 [main] INFO org.example.testngissue.workingCode.DataDrivenFactoryParent -- DataDrivenFactoryParent.mapDataProvider called
19:06:01.672 [main] INFO org.example.testngissue.workingCode.DataDrivenFactoryParent -- Inside factory: creating test instance for params: {password=pass1, email=user1@example.com}
19:06:01.688 [main] INFO org.example.testngissue.workingCode.DataDrivenFactoryParent -- Inside factory: creating test instance for params: {password=pass2, email=user2@example.com}
19:06:01.752 [main] INFO org.testng.internal.Utils -- [TestNG] Running:
  Command line suite

19:06:01.781 [main] INFO org.example.testngissue.workingCode.CoreTestCaseClass -- FactoryMapTestCase: testWithMap called with params: {password=pass1, email=user1@example.com}
19:06:01.781 [main] INFO org.example.testngissue.workingCode.CoreTestCaseClass -- FactoryMapTestCase: email=user1@example.com, password=pass1
19:06:01.783 [main] INFO org.example.testngissue.workingCode.CoreTestCaseClass -- FactoryMapTestCase: testWithMap called with params: {password=pass2, email=user2@example.com}
19:06:01.783 [main] INFO org.example.testngissue.workingCode.CoreTestCaseClass -- FactoryMapTestCase: email=user2@example.com, password=pass2

===============================================
FactorySuite
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================


Process finished with exit code 0


Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions