允许 Evosuite 在测试生成期间写入文件
Allow Evosuite to write files during test generation
我目前正在尝试让 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;
}
}
}
Im 运行 从命令行使用这些选项的 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 程序生成测试的不同方法?
由于 cubrr.
,我想出了如何在不需要编写临时文件的情况下 运行 JNA
- 将系统特定的
jnidispatch.[dll, ...]
文件复制到 文件夹
- 在命令中添加
-Djna.boot.library.path=folder -Djna.nounpack=true
注意:jna.boot.library.path
只能指向包含文件夹,不要写folder/jnidispatch
。
初题解答:
设置 evosuite 选项 -Dsandbox=false
将消除对测试生成的大部分限制,并最终允许我生成测试!
我目前正在尝试让 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;
}
}
}
Im 运行 从命令行使用这些选项的 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 程序生成测试的不同方法?
由于 cubrr.
,我想出了如何在不需要编写临时文件的情况下 运行 JNA- 将系统特定的
jnidispatch.[dll, ...]
文件复制到 文件夹 - 在命令中添加
-Djna.boot.library.path=folder -Djna.nounpack=true
注意:jna.boot.library.path
只能指向包含文件夹,不要写。 folder/jnidispatch
初题解答:
设置 evosuite 选项 -Dsandbox=false
将消除对测试生成的大部分限制,并最终允许我生成测试!