小编典典

模拟Runtime.getRuntime()?

java

任何人都可以对如何最好地使用EasyMock进行呼叫提出任何建议Runtime.getRuntime().exec(xxx)吗?

我可以将调用移到另一个实现接口的类中的方法中,而不是在理想环境中。

interface RuntimeWrapper {
    ProcessWrapper execute(String command) throws IOException;
}

interface ProcessWrapper {
    int waitFor() throws InterruptedException;
}

我想知道是否还有其他建议?


阅读 214

收藏
2020-11-13

共1个答案

小编典典

你的班级不应该打电话Runtime.getRuntime()。它应该期望将a
Runtime设置为其依赖项,并对其进行处理。然后,在测试中,您可以轻松提供一个模拟并将其设置为依赖项。

作为旁注,我建议您观看有关面向对象设计的本课程以提高可测试性

更新:
我没有看到私有构造函数。您可以尝试使用Java字节码检测器来添加另一个构造函数或将该构造函数公开,但是事实证明这也是不可能的(如果对该类有一些限制)。

因此,您的选择是制作一个包装器(如您在问题中所建议的),并遵循依赖项注入方法。

2020-11-13