允许 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:evosuitetestlibjna-5.2.0.jar" -class Example -criterion branch

Evosuite 不会达到 100% 的分支覆盖率(只有微不足道的 33%),但在超时后通过以下消息通知我:

* Permissions denied during test execution:
  - java.io.FilePermission:
         write C:UsersPCAppDataLocalTempjna--2025216854: 1

我发现JNA需要写入一些临时文件才能工作,但是Evosuite将在测试生成期间阻止任何文件写入的诱惑。我知道在大多数情况下这是一个合理的策略,因为您不希望 Evosuite 在为saveFile()函数生成测试时将随机文件写入磁盘,但就我而言,这应该不是问题。

有没有办法告诉 Evosuite 允许在测试生成期间写入文件,或者使用不同的方法来使用 JNA 库为 java 程序生成测试?

由于 cubrr,我想出了如何在不需要编写临时文件的情况下运行 JNA。

  • 将系统特定的jnidispatch.[dll, ...]文件复制到文件夹
  • -Djna.boot.library.path=folder -Djna.nounpack=true添加到命令

注意:jna.boot.library.path应该只指向 containig 文件夹,不要folder/jnidispatch


最初问题的解决:

-Dsandbox=false设置 evosuite 选项将消除对测试生成的大多数限制,并最终允许我生成我的测试!

相关内容

  • 没有找到相关文章

最新更新