use of org.evosuite.testcase.statements.MethodStatement in project evosuite by EvoSuite.
the class AbstractMOSA method hasMethodCall.
/**
* This method checks whether the test has only primitive type statements. Indeed,
* crossover and mutation can lead to tests with no method calls (methods or constructors call),
* thus, when executed they will never cover something in the class under test.
*
* @param test to check
* @return true if the test has at least one method or constructor call (i.e., the test may
* cover something when executed; false otherwise
*/
private boolean hasMethodCall(T test) {
boolean flag = false;
TestCase tc = ((TestChromosome) test).getTestCase();
for (Statement s : tc) {
if (s instanceof MethodStatement) {
MethodStatement ms = (MethodStatement) s;
boolean isTargetMethod = ms.getDeclaringClassName().equals(Properties.TARGET_CLASS);
if (isTargetMethod)
return true;
}
if (s instanceof ConstructorStatement) {
ConstructorStatement ms = (ConstructorStatement) s;
boolean isTargetMethod = ms.getDeclaringClassName().equals(Properties.TARGET_CLASS);
if (isTargetMethod)
return true;
}
}
return flag;
}
use of org.evosuite.testcase.statements.MethodStatement in project evosuite by EvoSuite.
the class MethodCoverageTestFitness method getFitness.
/**
* {@inheritDoc}
*
* Calculate fitness
*
* @param individual
* a {@link org.evosuite.testcase.ExecutableChromosome} object.
* @param result
* a {@link org.evosuite.testcase.execution.ExecutionResult} object.
* @return a double.
*/
@Override
public double getFitness(TestChromosome individual, ExecutionResult result) {
double fitness = 1.0;
List<Integer> exceptionPositions = asSortedList(result.getPositionsWhereExceptionsWereThrown());
for (Statement stmt : result.test) {
if (!isValidPosition(exceptionPositions, stmt.getPosition())) {
break;
}
if ((stmt instanceof MethodStatement || stmt instanceof ConstructorStatement)) {
EntityWithParametersStatement ps = (EntityWithParametersStatement) stmt;
String className = ps.getDeclaringClassName();
String methodDesc = ps.getDescriptor();
String methodName = ps.getMethodName() + methodDesc;
if (this.className.equals(className) && this.methodName.equals(methodName)) {
fitness = 0.0;
break;
}
}
}
updateIndividual(this, individual, fitness);
if (fitness == 0.0) {
individual.getTestCase().addCoveredGoal(this);
}
if (Properties.TEST_ARCHIVE) {
Archive.getArchiveInstance().updateArchive(this, individual, fitness);
}
return fitness;
}
use of org.evosuite.testcase.statements.MethodStatement in project evosuite by EvoSuite.
the class MethodNoExceptionCoverageTestFitness method getFitness.
/**
* {@inheritDoc}
*
* Calculate fitness
*
* @param individual
* a {@link org.evosuite.testcase.ExecutableChromosome} object.
* @param result
* a {@link org.evosuite.testcase.execution.ExecutionResult} object.
* @return a double.
*/
@Override
public double getFitness(TestChromosome individual, ExecutionResult result) {
double fitness = 1.0;
List<Integer> exceptionPositions = new ArrayList<Integer>();
if (Properties.BREAK_ON_EXCEPTION) {
// we consider only the first thrown exception
if (!result.getPositionsWhereExceptionsWereThrown().isEmpty()) {
int firstPosition = Collections.min(result.getPositionsWhereExceptionsWereThrown());
exceptionPositions.add(firstPosition);
}
} else {
// we consider all thrown exceptions (if any)
exceptionPositions.addAll(result.getPositionsWhereExceptionsWereThrown());
}
for (Statement stmt : result.test) {
if (exceptionPositions.contains(stmt.getPosition())) {
if (Properties.BREAK_ON_EXCEPTION)
// if we look at the first exception, then no need to iterate over the remaining statements
break;
else
// otherwise we simple skip statements throwing an exception
continue;
}
if ((stmt instanceof MethodStatement || stmt instanceof ConstructorStatement)) {
EntityWithParametersStatement ps = (EntityWithParametersStatement) stmt;
String className = ps.getDeclaringClassName();
String methodDesc = ps.getDescriptor();
String methodName = ps.getMethodName() + methodDesc;
if (this.className.equals(className) && this.methodName.equals(methodName)) {
fitness = 0.0;
break;
}
}
}
updateIndividual(this, individual, fitness);
if (fitness == 0.0) {
individual.getTestCase().addCoveredGoal(this);
}
if (Properties.TEST_ARCHIVE) {
Archive.getArchiveInstance().updateArchive(this, individual, fitness);
}
return fitness;
}
use of org.evosuite.testcase.statements.MethodStatement in project evosuite by EvoSuite.
the class ParameterLocalSearch method doSearch.
/* (non-Javadoc)
* @see org.evosuite.testcase.LocalSearch#doSearch(org.evosuite.testcase.TestChromosome, int, org.evosuite.ga.LocalSearchObjective)
*/
/**
* {@inheritDoc}
*/
@Override
public boolean doSearch(TestChromosome test, int statement, LocalSearchObjective<TestChromosome> objective) {
Statement stmt = test.getTestCase().getStatement(statement);
backup(test, stmt);
if (stmt instanceof MethodStatement) {
return doSearch(test, (MethodStatement) stmt, objective);
} else if (stmt instanceof ConstructorStatement) {
return doSearch(test, (ConstructorStatement) stmt, objective);
} else if (stmt instanceof FieldStatement) {
return doSearch(test, (FieldStatement) stmt, objective);
} else {
return false;
}
}
use of org.evosuite.testcase.statements.MethodStatement in project evosuite by EvoSuite.
the class LocalSearchArraySystemTest method getArrayTest.
private TestCase getArrayTest(int length) throws NoSuchMethodException, SecurityException, ConstructionFailedException, ClassNotFoundException {
Class<?> sut = TestGenerationContext.getInstance().getClassLoaderForSUT().loadClass(Properties.TARGET_CLASS);
GenericClass clazz = new GenericClass(sut);
DefaultTestCase test = new DefaultTestCase();
GenericConstructor gc = new GenericConstructor(clazz.getRawClass().getConstructors()[0], clazz);
TestFactory testFactory = TestFactory.getInstance();
VariableReference callee = testFactory.addConstructor(test, gc, 0, 0);
VariableReference arrayVar = test.addStatement(new ArrayStatement(test, int[].class, length));
for (int i = 0; i < length; i++) {
// Add value
VariableReference intVar = test.addStatement(new IntPrimitiveStatement(test, 0));
test.addStatement(new AssignmentStatement(test, new ArrayIndex(test, (ArrayReference) arrayVar, i), intVar));
}
Method m = clazz.getRawClass().getMethod("testMe", new Class<?>[] { int[].class });
GenericMethod method = new GenericMethod(m, sut);
MethodStatement ms = new MethodStatement(test, method, callee, Arrays.asList(new VariableReference[] { arrayVar }));
test.addStatement(ms);
return test;
}
Aggregations