BDDMockito`given...willReturn...`仅调用一次模拟,而不是每次调用`given函数

问题描述

我在实用程序类中定义了一个静态方法,该类在Unix环境中执行shell命令:

public final class Shell {
    
    public static String execute(String[] commands,long timeout) {
        //do stuff
    }

}

此方法用于在环境上执行Bash命令,这意味着我们不仅返回String包含特定命令的输出,而且该命令本身可能会发生一些影响

例如,在特定情况下,该命令将生成一个.out文件,并以String的形式返回操作状态。

出于测试目的,我需要模拟此调用。因此,我需要它来生成.out文件作为模拟文件并返回内容。 为此,我使用了BDDMockitoPowerMockito,如下所示:

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 (将#修改为@)