Разрешить Evosuite записывать файлы во время генерации тестов
Сейчас я пытаюсь заставить Evosuite работать с JNA. Рассмотрим следующий базовый пример:
import com.sun.jna.ptr.IntByReference;
public class Example {
public static int foo(int x) {
IntByReference c = new IntByReference(x);
if (c.getValue() == 100) {
return 100;
} else {
return 0;
}
}
}
Я запускаю Evosuite из командной строки с этими параметрами:
java32 -jar evosuite.jar -projectCP "src;E:\evosuite\test\lib\jna-5.2.0.jar" -class Example -criterion branch
Evosuite не достигнет 100% покрытия филиала (только тривиальные 33%), но уведомит меня этим сообщением по истечении времени ожидания:
* Permissions denied during test execution:
- java.io.FilePermission:
write C:\Users\PC\AppData\Local\Temp\jna--2025216854: 1
Я обнаружил, что JNA необходимо написать некоторые временные файлы, чтобы работать, но Evosuite будет блокировать любые попытки записи файлов во время генерации тестов. Я понимаю, что в большинстве случаев это разумная политика, поскольку вы не хотите, чтобы Evosuite записывала случайные файлы на ваш диск при создании тестов для saveFile()
функция, но в моем случае это не должно быть проблемой.
Есть ли способ указать Evosuite разрешить запись файлов во время генерации тестов или другой подход для генерации тестов для Java-программ с использованием библиотеки JNA?
1 ответ
Я понял, как запустить JNA без необходимости записи временных файлов благодаря cubrr.
- скопировать системную
jnidispatch.[dll, ...]
файл в папку - добавлять
-Djna.boot.library.path=folder -Djna.nounpack=true
в команду
Обратите внимание jna.boot.library.path
следует только указать на папку содержащуюся, не писать folder/jnidispatch
,
Решение исходного вопроса:
Настройка опции evosuite -Dsandbox=false
снимет большинство ограничений для генерации тестов и, наконец, позволит мне создавать свои тесты!