Разрешить 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 снимет большинство ограничений для генерации тестов и, наконец, позволит мне создавать свои тесты!

Другие вопросы по тегам