Uploaded image for project: 'Maven Surefire'
  1. Maven Surefire
  2. SUREFIRE-1398

TestNG test fails when both JUnitCore provider and TestNG provider are on classpath

    XMLWordPrintableJSON

Details

    Description

      When both JUnitCore and TestNG providers are on classpath:

              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
                  <version>2.20</version>
                  <dependencies>
                      <dependency>
                          <groupId>org.apache.maven.surefire</groupId>
                          <artifactId>surefire-junit47</artifactId>
                          <version>2.20</version>
                      </dependency>
                      <dependency>
                          <groupId>org.apache.maven.surefire</groupId>
                          <artifactId>surefire-testng</artifactId>
                          <version>2.20</version>
                      </dependency>
                  </dependencies>
              </plugin>
      

      then the TestNG execution fails with a message:

      Configuring TestNG with: TestNG60Configurator
      Cannot use a threadCount parameter less than 1; 1 > 0
      Usage: <main class> [options] The XML suite files to run
        Options:
          -configfailurepolicy
             Configuration failure policy (skip or continue)
          -d
             Output directory
          -dataproviderthreadcount
             Number of threads to use when running data providers
          -excludegroups
             Comma-separated list of group names to  exclude
          -groups
             Comma-separated list of group names to be run
          -junit
             JUnit mode
             Default: false
          -listener
             List of .class files or list of class names implementing ITestListener or
             ISuiteListener
          -methods
             Comma separated of test methods
             Default: []
          -methodselectors
             List of .class files or list of class names implementing IMethodSelector
          -mixed
             Mixed mode - autodetect the type of current test and run it with
             appropriate runner
             Default: false
          -objectfactory
             List of .class files or list of class names implementing
             ITestRunnerFactory
          -parallel
             Parallel mode (methods, tests or classes)
             Possible Values: [tests, methods, classes, instances, none, true, false]
          -port
             The port
          -reporter
             Extended configuration for custom report listener
          -suitename
             Default name of test suite, if not specified in suite definition file or
             source code
          -suitethreadpoolsize
             Size of the thread pool to use to run suites
             Default: 1
          -testclass
             The list of test classes
          -testjar
             A jar file containing the tests
          -testname
             Default name of test, if not specified in suitedefinition file or source
             code
          -testnames
             The list of test names to run
          -testrunfactory, -testRunFactory
             The factory used to create tests
          -threadcount
             Number of threads to use when running tests in parallel
          -usedefaultlisteners
             Whether to use the default listeners
             Default: true
          -log, -verbose
             Level of verbosity
          -xmlpathinjar
             The full path to the xml file inside the jar file (only valid if -testjar
             was specified)
             Default: testng.xml
      

      The same behavior occurs when instead of these two providers I use my own dynamic provider and delegate the execution to the TestNG provider.

      The cause of the behavior is a combination of the method convertJunitCoreParameters() and the TestNG provider.
      The method is called for JunitCoreProvider and sets the thread count to the current value (no matter if it is set or not). In case that it is not set, then the value is 0, which causes the before mentioned failure when TestNGProvider is being executed.
      The same in case of DynamicProvider
      In the description of the parameter threadCount, there is written that it only makes sense to use in conjunction with the parallel parameter. So, I would propose to set the parameter only when the parameter parallel is set.

      Attachments

        Activity

          People

            sjaranowski Slawomir Jaranowski
            mjobanek Matous Jobanek
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: