use of org.kanonizo.framework.objects.SystemUnderTest in project kanonizo by kanonizo.
the class Framework method loadClasses.
public void loadClasses() throws ClassNotFoundException {
sut = new SystemUnderTest();
List<File> sourceFiles = findClasses(sourceFolder);
Premain.instrument = true;
for (File file : sourceFiles) {
Class<?> cl = loadClassFromFile(file);
sut.addClass(new ClassUnderTest(cl));
logger.info("Added class " + cl.getName());
}
Premain.instrument = false;
List<File> testFiles = findClasses(testFolder);
for (File file : testFiles) {
Class<?> cl = loadClassFromFile(file);
if (cl != null) {
if (Util.isTestClass(cl)) {
List<Method> testMethods = TestingUtils.getTestMethods(cl);
logger.info("Adding " + testMethods.size() + " test methods from " + cl.getName());
for (Method m : testMethods) {
if (TestingUtils.isParameterizedTest(cl, m)) {
Optional<Method> parameterMethod = Arrays.asList(cl.getMethods()).stream().filter(method -> method.getAnnotation(Parameters.class) != null).findFirst();
if (parameterMethod.isPresent()) {
try {
Iterable<Object[]> parameters = (Iterable<Object[]>) parameterMethod.get().invoke(null, new Object[] {});
for (Object[] inst : parameters) {
ParameterisedTestCase ptc = new ParameterisedTestCase(cl, m, inst);
sut.addTestCase(ptc);
}
} catch (IllegalAccessException e) {
logger.error(e);
} catch (InvocationTargetException e) {
logger.error(e);
}
} else {
logger.error("Trying to create parameterized test case that has no parameter method");
}
} else {
TestCase t = new TestCase(cl, m);
sut.addTestCase(t);
}
}
} else {
sut.addExtraClass(cl);
logger.info("Adding supporting test class " + cl.getName());
}
}
}
ClassUnderTest.resetCount();
logger.info("Finished adding source and test files. Total " + sut.getClassesUnderTest().size() + " classes and " + sut.getTestSuite().size() + " test cases");
}
use of org.kanonizo.framework.objects.SystemUnderTest in project kanonizo by kanonizo.
the class Framework method setupFitnessFunction.
/**
* Create the instance of the fitness function that will be used to guide a metaheuristic search.
* It is assumed that the Fitness Function has been set by the main method and is contained in the
* {@link Properties#FITNESS_FUNC} object. Default case is an {@link APFDFunction}, and other
* options include {@link APLCFunction} at present. More will be added soon
*/
protected void setupFitnessFunction() {
FitnessFunction<SystemUnderTest> func;
switch(Properties.COVERAGE_APPROACH) {
case LINE:
func = new APLCFunction(sut);
break;
case BRANCH:
func = new APBCFunction(sut);
break;
default:
func = new APLCFunction(sut);
}
if (algorithm instanceof MutationSearchAlgorithm) {
func = ((MutationSearchAlgorithm) algorithm).getFitnessFunction();
}
sut.getTestSuite().setFitnessFunction(func);
Properties.INSTRUMENT = func instanceof InstrumentedFitnessFunction;
}
Aggregations