如何集成测试 Spring Shell v2.x.



新的 Spring Shell 文档似乎没有提供任何如何在 Spring Boot 上下文中集成测试 CLI 命令的示例。任何指示或示例将不胜感激。

该方法Shell#evaluate()已经公开,并且为此目的具有非常具体的责任(仅评估一个命令)。如果您觉得我们应该提供更多内容,请在项目中创建一个问题(肯定需要编写有关测试的文档章节)

这是我如何做到这一点的。

您首先需要覆盖默认的 shell 应用程序运行器,以避免卡在 jline 循环中。您可以通过定义自己的内容来执行此操作,例如:

@Component
public class CliAppRunner implements ApplicationRunner {
    public CliAppRunner() {
    }
    @Override
    public void run(ApplicationArguments args) throws Exception {
        //do nothing
    }

}

请注意,您必须将此自定义应用程序运行程序与"测试"配置文件相关联,以便它仅在集成测试期间覆盖。

如果你想测试一个 shell 命令 "add 1 3",你可以编写一个这样的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes =CliConfig.class)
public class ShellCommandIntegrationTest {
    @Autowired
    private Shell shell;
    @Test
    public void runTest(){

        Object result=shell.evaluate(new Input(){
            @Override
            public String rawText() {
                return "add 1 3";
            }
        });
        DefaultResultHandler  resulthandler=new DefaultResultHandler();
        resulthandler.handleResult(result);

    }

}

请注意,上面的测试没有断言任何内容。您可能必须编写自己的 ResultHandler 接口的小实现,该接口处理结果的解析/格式化,以便可以断言它。

希望对您有所帮助。

>Spring Shell 2.0.1 依赖于 Spring Boot 1.5.8,而 Spring Boot 1.5.8 又依赖于 Spring Framework 4.3.12。这使得研究如何实现测试具有挑战性,因为最新版本的Spring Shell不依赖于其他Spring库的最新版本。看看我的示例项目,sualeh/spring-shell-2-tests-example,其中包含示例Spring Shell应用程序的示例单元,功能和集成测试。

相关内容

  • 没有找到相关文章

最新更新