更换GA后EvoSuite无法生成测试用例的问题求助
问题分析
从错误栈可以看到,核心问题是FitnessFunctionMock.isMaximizationFunction()被调用时抛出未实现异常。这个Mock类在多目标测试生成策略(MOSuiteStrategy)中被使用,但该类未实现必要方法,直接导致GA流程中断。
解决方案
1. 修正算法参数拼写
你的命令中-Dalgorithm=CELLULAR_GAw多了一个w,正确参数值应为CELLULAR_GA,虽然日志显示系统识别到了Cellular GA,但拼写错误可能引发潜在问题,先修正命令:
$EvoSuite -class tutorial.Stack -projectCP Tutorial_Stack/target/classes/ -Dalgorithm=CELLULAR_GA
2. 切换到单目标搜索策略
多目标策略(MOSuiteStrategy)依赖完整的适应度函数实现,当前环境中的Mock类不支持该流程,你可以指定使用单目标策略绕开这个问题:
$EvoSuite -class tutorial.Stack -projectCP Tutorial_Stack/target/classes/ -Dalgorithm=CELLULAR_GA -Dsearch_strategy=DEFAULT
3. 升级EvoSuite版本
你使用的1.2.1-SNAPSHOT版本可能存在该已知bug,建议升级到最新稳定版(比如1.5.0或更高),新版本已修复Mock类的方法缺失问题。
4. 检查Java版本兼容性
Ubuntu 12.04默认Java版本可能低于EvoSuite 1.2.1要求的Java 8,运行以下命令确认版本:
java -version
如果版本低于Java 8,需安装OpenJDK 8或Oracle JDK 8,确保环境符合要求。
5. 替换FitnessFunctionMock(针对扩展开发场景)
如果你是在扩展EvoSuite的开发中遇到该问题,需确保使用CELLULAR_GA时传递的是实际适应度函数实现,而非Mock类。修改MOSuiteStrategy或相关代码,将FitnessFunctionMock替换为具体的适应度函数(比如LineCoverageFitness等),确保isMaximizationFunction()方法被正确实现。
内容的提问来源于stack exchange,提问作者Gabriele Dario De Siano

