xmlmavenmaven-pluginscalatestscalatest-maven-plugin

Scalatest maven plugin: ERROR: -c has been deprecated for a very long time and is no longer supported


I'm using the scalatest-maven-plugin latest 1.0 version, with source code here. Trying to run my suites in parallel and using the following configuration:

<build><plugin>
    <groupId>org.scalatest</groupId>
    <artifactId>scalatest-maven-plugin</artifactId>
    <version>1.0</version> 
    <configuration>
        <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
        <junitxml>.</junitxml>
        <filereports>WDF TestSuite.txt</filereports>
        <htmlreporters>${project.build.directory}/html/scalatest</htmlreporters>                    
        <parallel>true</parallel>
    </configuration>
    <executions>
        <execution>
            <id>test</id>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
    </executions>
</plugin></build>

leads to the following Maven build error:

[INFO]
[INFO] --- scalatest-maven-plugin:1.0:test (test) @ myproject ---
Exception in thread "ScalaTest-main" java.lang.IllegalArgumentException: ERROR: -c has been deprecated for a very long time and is no longer supported, to prepare for reusing it for a different purpos
e in the near future. Please change all uses of -c to -P.
        at org.scalatest.tools.ArgsParser$.checkArgsForValidity(ArgsParser.scala:46)
        at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:857)
        at org.scalatest.tools.Runner$.main(Runner.scala:827)
        at org.scalatest.tools.Runner.main(Runner.scala)

Basically the scalatest-maven-plugin is passing -c to the scalatest CLI instead of the correct -P .. or even better -P10 i.e. the number of threads to use.

How can I pass the -P10 to the scalatest process via Maven? I have tried setting it in the MAVEN_OPTS environment variable or in the Maven CLI directly but it doesn't get picked up.

I have also tried configuring the scalatest-maven-plugin like this:

<configuration>
    <argLine>-P10</argLine>
</configuration>

but this parameter is passed to the java process and not to the Scalatest so it fails too.


Solution

  • I created my own fork of the scalatest-maven-plugin, fixed the parallel issue and versioned it as 1.1-SNAPSHOT I had to also fix the build etc it was all broken. I included a directly downloadable compiled tarball version scalatest-maven-plugin_1.1-SNAPSHOT.tar.gz

    Then to test it, forked my own version of a scala-maven-example that uses my own fork of the scalatest-maven-plugin and modified the scalatest sample code to display the Thread Id that loads each Suite and the Thread Id that executes the first test of each Suite. I also make the current thread sleep in each of those points for a random time up to 10s to see what's going on. All scalatest Suites are loaded by a single thread and executed in parallel if parallel is enabled.

    This is the result using <parallel>false</parallel>:

    [INFO] --- scalatest-maven-plugin:1.1-SNAPSHOT:test (test) @ scala-maven-testing ---
    Discovery starting.
    ** loading 'net.lockney.AcceptanceTest' Suite with ThreadId=1
    ==> executing 'Simple thing state' test with ThreadId=1
    ** loading 'net.lockney.MatcherExampleSuite' Suite with ThreadId=1
    ** loading 'net.lockney.SimpleSpec' Suite with ThreadId=1
    ** loading 'net.lockney.SimpleSuite' Suite with ThreadId=1
    Discovery completed in 19 seconds, 98 milliseconds.
    Run starting. Expected test count is: 8
    AcceptanceTest:
    As a user 
    I want to be able to create a simple thing and implicitly start it 
    So that I can then turn it off 
    And see that it is stopped 
    Feature: Simple thing state
      Scenario: User stops thing when it's already on
        Given An initialized thing, that has not been started 
        When User stops it again 
        Then We should see that it is stopped 
    ==> executing 'equality' test with ThreadId=1
    MatcherExampleSuite:
    - equality
    ==> executing 'SimpleObject' should 'accept a String' test with ThreadId=1
    - string matchers *** FAILED ***
      "something" did not end with substring "some" (MatcherExampleSuite.scala:29)
    SimpleSpec:
    SimpleObject
    - should accept a String
    - should even accept really long Strings
    ==> executing 'An empty Set should have size 0' test with ThreadId=1
    ...
    Run completed in 28 seconds, 300 milliseconds.
    Total number of tests run: 8
    Suites: completed 5, aborted 0
    Tests: succeeded 6, failed 2, canceled 0, ignored 0, pending 0
    *** 2 TESTS FAILED ***
    

    and this is the result using <parallel>true</parallel> and <parallelThreads>10</parallelThreads>:

    [INFO] --- scalatest-maven-plugin:1.1-SNAPSHOT:test (test) @ scala-maven-testing ---
    Discovery starting.
    ** loading 'net.lockney.AcceptanceTest' Suite with ThreadId=1
    ==> executing 'Simple thing state' test with ThreadId=1
    ** loading 'net.lockney.MatcherExampleSuite' Suite with ThreadId=1
    ** loading 'net.lockney.SimpleSpec' Suite with ThreadId=1
    ** loading 'net.lockney.SimpleSuite' Suite with ThreadId=1
    Discovery completed in 30 seconds, 904 milliseconds.
    Run starting. Expected test count is: 8
    MatcherExampleSuite:
    SimpleSuite:
    AcceptanceTest:
    SimpleSpec:
    SimpleObject
    As a user 
    I want to be able to create a simple thing and implicitly start it 
    So that I can then turn it off 
    And see that it is stopped 
    Feature: Simple thing state
    ==> executing 'An empty Set should have size 0' test with ThreadId=13
    ==> executing 'SimpleObject' should 'accept a String' test with ThreadId=12
    ==> executing 'equality' test with ThreadId=11
    ...
    Run completed in 40 seconds, 706 milliseconds.
    Total number of tests run: 8
    Suites: completed 5, aborted 0
    Tests: succeeded 6, failed 2, canceled 0, ignored 0, pending 0
    *** 2 TESTS FAILED ***