允许Evosuite在测试生成期间写入文件

问题描述 投票:0回答:1

我目前正试图让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在测试生成期间允许文件写入或使用JNA库生成java程序测试的不同方法?

java jna evosuite
1个回答
0
投票

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

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

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


解决最初的问题:

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

© www.soinside.com 2019 - 2024. All rights reserved.