如何集成测试 Spring Shell v2.x
How to Integration Test Spring Shell v2.x
新的 Spring Shell docs 似乎没有提供任何示例来说明如何在 Spring 引导上下文中集成测试 CLI 命令。任何指针或示例将不胜感激。
方法 Shell#evaluate()
已被制定 public 并且有其非常具体的责任(仅评估一个命令)正是为了这个目的。如果您觉得我们应该提供更多,请创建项目问题(绝对需要编写有关测试的文档章节)
下面是我的工作原理。
您首先需要覆盖默认的 shell 应用程序运行器以避免陷入 jline 循环。您可以通过定义自己的方式来做到这一点,例如:
@Component
public class CliAppRunner implements ApplicationRunner {
public CliAppRunner() {
}
@Override
public void run(ApplicationArguments args) throws Exception {
//do nothing
}
}
请注意,您必须将此自定义应用程序运行器与 "Test" 配置文件相关联,以便它仅在集成测试期间覆盖。
如果你想测试一个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 接口的小实现来处理结果的 parsing/formatting,以便它可以被断言。
希望对您有所帮助。
Spring Shell 2.0.1 依赖于 Spring Boot 1.5.8,后者又依赖于 Spring Framework 4.3.12。这使得研究如何实施测试具有挑战性,因为 Spring Shell 的最新版本不依赖于其他 Spring 库的最新版本。看一下我的示例项目 sualeh/spring-shell-2-tests-example,其中包含针对示例 Spring Shell 应用程序的示例单元、功能和集成测试。
新的 Spring Shell docs 似乎没有提供任何示例来说明如何在 Spring 引导上下文中集成测试 CLI 命令。任何指针或示例将不胜感激。
方法 Shell#evaluate()
已被制定 public 并且有其非常具体的责任(仅评估一个命令)正是为了这个目的。如果您觉得我们应该提供更多,请创建项目问题(绝对需要编写有关测试的文档章节)
下面是我的工作原理。
您首先需要覆盖默认的 shell 应用程序运行器以避免陷入 jline 循环。您可以通过定义自己的方式来做到这一点,例如:
@Component
public class CliAppRunner implements ApplicationRunner {
public CliAppRunner() {
}
@Override
public void run(ApplicationArguments args) throws Exception {
//do nothing
}
}
请注意,您必须将此自定义应用程序运行器与 "Test" 配置文件相关联,以便它仅在集成测试期间覆盖。
如果你想测试一个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 接口的小实现来处理结果的 parsing/formatting,以便它可以被断言。
希望对您有所帮助。
Spring Shell 2.0.1 依赖于 Spring Boot 1.5.8,后者又依赖于 Spring Framework 4.3.12。这使得研究如何实施测试具有挑战性,因为 Spring Shell 的最新版本不依赖于其他 Spring 库的最新版本。看一下我的示例项目 sualeh/spring-shell-2-tests-example,其中包含针对示例 Spring Shell 应用程序的示例单元、功能和集成测试。