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

时间:2019-01-14 11:01:42

标签: java jna 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在测试生成过程中允许文件写入,还是可以使用JNA库为Java程序生成测试的另一种方法?

1 个答案:

答案 0 :(得分:0)

感谢cubrr,我知道了如何运行JNA而不需要编写临时文件。

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

注意:jna.boot.library.path仅应指向containig文件夹,请勿写入 folder/jnidispatch


第一个问题的解决方案:

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