问题描述
我在实用程序类中定义了一个静态方法,该类在Unix环境中执行shell命令:
public final class Shell {
public static String execute(String[] commands,long timeout) {
//do stuff
}
}
此方法用于在环境上执行Bash命令,这意味着我们不仅返回String
包含特定命令的输出,而且该命令本身可能会发生一些影响
例如,在特定情况下,该命令将生成一个.out
文件,并以String
的形式返回操作状态。
出于测试目的,我需要模拟此调用。因此,我需要它来生成.out
文件作为模拟文件并返回内容。
为此,我使用了BDDMockito
和PowerMockito
,如下所示:
PowerMockito.mockStatic(Shell.class);
BDDMockito.given(Shell.execute(eq(specificArgument),anyLong()).willReturn(mock_out_execution());
...其中mock_out_execution()
是一个函数,它在工作目录上创建.out
文件,然后返回成功状态-模拟在真实Unix环境中的执行。
背景信息:
.out
文件由读取,执行某些操作然后将其删除的进程处理。这些信息对于理解我的问题很重要。
现在,在执行集成测试期间,
-
execute()
的{{1}}方法被称为第一次。将创建一个Shell
文件。 -
.out
文件因此被主线程处理并删除 -
.out
的{{1}}方法被称为第二次。应该重新创建一个execute()
文件。 - 因此
Shell
文件应再次处理,并在完成后删除。
问题是.out
在模拟被初始化时仅执行一次。
这意味着第一次调用.out
时,BDDMockito.given(...).willReturn(...)
文件在那里,进程可以对其进行处理。
但是,第二次调用execute()
时,将不再执行任何操作,因此缺少新的.out
文件,并且代码执行失败。
如何解决这个问题?每次调用我要模拟的方法时,使用execute()
实际调用模拟的正确方法是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)