Разрешить Evosuite записывать файлы во время генерации тестов - PullRequest
0 голосов
/ 14 января 2019

Я сейчас пытаюсь заставить 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 Ответ

0 голосов
/ 21 января 2019

Я понял, как запустить JNA без необходимости записи временных файлов, благодаря cubrr .

  • скопируйте системный jnidispatch.[dll, ...] файл в папку
  • добавить -Djna.boot.library.path=folder -Djna.nounpack=true к команде

Примечание: jna.boot.library.path должен указывать только на папку содержащуюся, не записывать folder/jnidispatch.


Решение исходного вопроса:

Установка опции evosuite -Dsandbox=false снимет большинство ограничений для генерации тестов и, наконец, позволит мне создавать свои тесты!

...