* EvoSuite 1.1.1-SNAPSHOT
* Analyzing classpath (generating inheritance tree)
- target/classes
* Found 1 matching classes for prefix br.ufmg.aserg.victorveloso.queue
* Current class: br.ufmg.aserg.victorveloso.queue.Queue
* Going to generate test cases for class: br.ufmg.aserg.victorveloso.queue.Queue
* Starting Client-0
* Connecting to master process on port 3475
* Analyzing classpath:
* Inheritance tree loaded from /tmp/ES_inheritancetree4731698684683663700.xml.gz
* Finished analyzing classpath
* Generating tests for class br.ufmg.aserg.victorveloso.queue.Queue
* Test criteria:
- Line Coverage
- Branch Coverage
- Exception
- Mutation testing (weak)
- Method-Output Coverage
- Top-Level Method Coverage
- No-Exception Top-Level Method Coverage
- Context Branch Coverage
* Setting up search algorithm for whole suite generation
Originally, MOSA was implemented with a 'RANK_CROWD_DISTANCE_TOURNAMENT' selection function. You may want to consider using it.
* Computation finished
[MASTER] 07:29:16.774 [logback-2] ERROR ClientNodeImpl - Error when generating tests for: br.ufmg.aserg.victorveloso.queue.Queue with seed 1623310155841. Configuration id : null
java.lang.IllegalArgumentException: Unsupported type of fitness function: class org.evosuite.coverage.line.LineCoverageSuiteFitness
at org.evosuite.ga.metaheuristics.TestSuiteAdapter.mapFitnessFunctionToTestCaseLevel(TestSuiteAdapter.java:627)
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
at org.evosuite.ga.metaheuristics.TestSuiteAdapter.addFitnessFunctions(TestSuiteAdapter.java:634)
at org.evosuite.strategy.WholeTestSuiteStrategy.generateTests(WholeTestSuiteStrategy.java:67)
at org.evosuite.TestSuiteGenerator.generateTests(TestSuiteGenerator.java:630)
at org.evosuite.TestSuiteGenerator.generateTestSuite(TestSuiteGenerator.java:205)
at org.evosuite.rmi.service.ClientNodeImpl.lambda$startNewSearch$0(ClientNodeImpl.java:150)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
[MASTER] 07:29:16.878 [main] ERROR SearchStatistics - No statistics has been saved because EvoSuite failed to generate any test case
[MASTER] 07:29:16.979 [main] ERROR TestGeneration - failed to write statistics data
Expected result
EvoSuite should generate tests correctly. I've used EvoSuite previous release (1.0.6) through maven (configuring the pom.xml file) and it works flawlessly (see the output below).
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< br.ufv.aserg.victorveloso:Queue >-------------------
[INFO] Building Queue 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> evosuite-maven-plugin:1.0.6:generate (default-cli) > compile @ Queue >>>
[INFO]
[INFO] --- jacoco-maven-plugin:0.8.2:prepare-agent (default) @ Queue ---
[INFO] argLine set to -javaagent:/home/victor/.m2/repository/org/jacoco/org.jacoco.agent/0.8.2/org.jacoco.agent-0.8.2-runtime.jar=destfile=/home/victor/Universidade/Master/TestGeneration/ToolEvaluation/EvoSuite/RingBufferedQueue/target/jacoco.exec
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ Queue ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/victor/Universidade/Master/TestGeneration/ToolEvaluation/EvoSuite/RingBufferedQueue/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ Queue ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< evosuite-maven-plugin:1.0.6:generate (default-cli) < compile @ Queue <<<
[INFO]
[INFO]
[INFO] --- evosuite-maven-plugin:1.0.6:generate (default-cli) @ Queue ---
[INFO] Going to generate tests with EvoSuite
[INFO] Total memory: 800mb
[INFO] Time per class: 2 minutes
[INFO] Number of used cores: 1
[INFO] Target: /home/victor/Universidade/Master/TestGeneration/ToolEvaluation/EvoSuite/RingBufferedQueue/target/classes
[INFO] Basedir: /home/victor/Universidade/Master/TestGeneration/ToolEvaluation/EvoSuite/RingBufferedQueue
[INFO] Started spawn process manager on port 36395
[INFO] SLF4J: Class path contains multiple SLF4J bindings.
[INFO] SLF4J: Found binding in [jar:file:/home/victor/.m2/repository/org/evosuite/evosuite-master/1.0.6/evosuite-master-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
[INFO] SLF4J: Found binding in [jar:file:/home/victor/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
[INFO] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
[INFO] SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
[INFO] * EvoSuite 1.0.6
[INFO] Registered remote process from /127.0.0.1:46250
[INFO] Going to execute 1 jobs
[INFO] Estimated completion time: 2 minutes, by 2021-06-10T04:36:08.972
[INFO] Going to start job for: br.ufmg.aserg.victorveloso.queue.Queue. Expected to end in 120 seconds, by 2021-06-10T04:36:08.985
[INFO] Registered remote process from /127.0.0.1:46252
[INFO] Registered remote process from /127.0.0.1:46254
[INFO] Completed job. Left: 0
[INFO] * Updating database to br.ufmg.aserg.victorveloso.queue.Queue
[INFO] === CTG run results ===
[INFO] Removed test suites: 0
[INFO] New test suites: 1
[INFO] Stopping spawn process manager
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:17 min
[INFO] Finished at: 2021-06-10T04:35:25-03:00
[INFO] ------------------------------------------------------------------------
Additional info
While EvoSuite 1.0.6 works for my example project, it doesn't support Java 9+ and I would like to generate tests for Java 9+ projects.
Running EvoSuite 1.0.6 generates four logs std_(err|out)_(CLIENT|MASTER).log:
std_err_MASTER.log is empty
std_out_MASTER.log has four lines that describes configuration and ends with Computation finished
std_err_CLIENT.log has 493 lines, all of them are similar to the following template: [MASTER] 05:03:32.675 [TEST_EXECUTION_THREAD_0] ERROR AbstractStatement - Error assigning value of type Queue[] defined at statement Queue<String>[] queueArray0 = (Queue<String>[]) Array.newInstance(Queue.class, 5), assignment statement: queueArray0[0] = (Queue<String>) queueArray0; SUT=br.ufmg.aserg.victorveloso.queue.Queue
The only two differences are
Array.newInstance(Queue.class, #), being # any number from 1 to 19
the timestamp
std_out_CLIENT.log seems to be the expected result if I were using the command line jar:
Generating tests for class br.ufmg.aserg.victorveloso.queue.Queue
Test criteria:
Line Coverage
Branch Coverage
Exception
Mutation testing (weak)
Method-Output Coverage
Top-Level Method Coverage
No-Exception Top-Level Method Coverage
Context Branch Coverage
Setting up search algorithm for whole suite generation
[MASTER] 05:02:26.729 [pool-2-thread-1] WARN TestSuiteSerialization - Cannot load tests because file does not exist: /home/victor/Universidade/Master/TestGeneration/ToolEvaluation/EvoSuite/RingBufferedQueue/.evosuite/evosuite-seeds/br.ufmg.aserg.victorveloso.queue.Queue.seed
Loaded 0 tests from /home/victor/Universidade/Master/TestGeneration/ToolEvaluation/EvoSuite/RingBufferedQueue/.evosuite/evosuite-seeds/br.ufmg.aserg.victorveloso.queue.Queue.seed
Total number of test goals:
Line 55
Branch 36
Exception 0
MutationFactory 163
Output 30
Method 14
MethodNoException 14
CBranchFitnessFactory 36
Using seed 1623312145763
Starting evolution
Search finished after 66s and 658 generations, 259939 statements, best individual has fitness: 10.1
Writing sequences to pool
Minimizing test suite
Going to analyze the coverage criteria
Coverage analysis for criterion LINE
Coverage of criterion LINE: 100%
Total number of goals: 55
Number of covered goals: 55
Coverage analysis for criterion BRANCH
Coverage of criterion BRANCH: 100%
Total number of goals: 36
Number of covered goals: 36
Coverage analysis for criterion EXCEPTION
Coverage of criterion EXCEPTION: 100%
Total number of goals: 9
Number of covered goals: 9
Coverage analysis for criterion WEAKMUTATION
Coverage of criterion WEAKMUTATION: 98%
Total number of goals: 163
Number of covered goals: 159
Coverage analysis for criterion OUTPUT
Coverage of criterion OUTPUT: 73%
Total number of goals: 30
Number of covered goals: 22
Coverage analysis for criterion METHOD
Coverage of criterion METHOD: 100%
Total number of goals: 14
Number of covered goals: 14
Coverage analysis for criterion METHODNOEXCEPTION
Coverage of criterion METHODNOEXCEPTION: 100%
Total number of goals: 14
Number of covered goals: 14
Coverage analysis for criterion CBRANCH
Coverage of criterion CBRANCH: 100%
Total number of goals: 36
Number of covered goals: 36
Generated 29 tests with total length 127
Resulting test suite's coverage: 96% (average coverage for all fitness functions)
Generating assertions
Resulting test suite's mutation score: 88%
Compiling and checking tests
Writing JUnit test case 'Queue_ESTest' to /home/victor/Universidade/Master/TestGeneration/ToolEvaluation/EvoSuite/RingBufferedQueue/.evosuite/tmp_2021_06_10_05_02_24/tests
Context
EvoSuite 1.1 fails to generate tests for a simple java project.
I've tried four alternative solutions:
evosuite/evosuite:1.1.0-java-8
image;evosuite/evosuite:1.1.0-java-11
image;Steps to Reproduce
Fetching the example project:
git clone https://github.com/victorgveloso/RingBufferedQueue .
Fetching evosuite release jar:
wget https://github.com/EvoSuite/evosuite/releases/download/v1.1.0/evosuite-1.1.0.jar
Generating tests: Solution 1:
/usr/lib/jvm/java-8-openjdk/jre/bin/java -jar evosuite-1.1.0.jar -prefix br.ufmg.aserg.victorveloso.queue -projectCP target/classes
Solution 2:
/usr/lib/jvm/java-11-openjdk/jre/bin/java -jar evosuite-1.1.0.jar -prefix br.ufmg.aserg.victorveloso.queue -projectCP target/classes
Solution 3:
docker run -it -u ${UID} -v ${PWD}:/evosuite evosuite/evosuite:1.1.0-java-8 -prefix br.ufmg.aserg.victorveloso.queue -projectCP target/classes
Solution 4:
docker run -it -u ${UID} -v ${PWD}:/evosuite evosuite/evosuite:1.1.0-java-11 -prefix br.ufmg.aserg.victorveloso.queue -projectCP target/classes
EvoSuite Arguments
-prefix br.ufmg.aserg.victorveloso.queue -projectCP target/classes
Current Result
Expected result
EvoSuite should generate tests correctly. I've used EvoSuite previous release (1.0.6) through maven (configuring the
pom.xml
file) and it works flawlessly (see the output below).Additional info
std_(err|out)_(CLIENT|MASTER).log
:std_err_MASTER.log
is emptystd_out_MASTER.log
has four lines that describes configuration and ends withComputation finished
std_err_CLIENT.log
has 493 lines, all of them are similar to the following template:[MASTER] 05:03:32.675 [TEST_EXECUTION_THREAD_0] ERROR AbstractStatement - Error assigning value of type Queue[] defined at statement Queue<String>[] queueArray0 = (Queue<String>[]) Array.newInstance(Queue.class, 5), assignment statement: queueArray0[0] = (Queue<String>) queueArray0; SUT=br.ufmg.aserg.victorveloso.queue.Queue
Array.newInstance(Queue.class, #)
, being # any number from 1 to 19std_out_CLIENT.log
seems to be the expected result if I were using the command line jar: