11. 测试
由于各种原因,测试 cli 应用程序很困难:
-
操作系统之间存在差异。
-
在 OS 中,可能使用不同的 shell 实现。
-
什么进壳又什么出壳 我完全是 由于控制字符,您在 shell 本身中看到的不同。
-
Shell 可能感觉是同步的,但很可能不是 其中写入了某些内容,您不能假设 Next Update 在 在它不是最终的。
测试支持目前正在开发中,并将会 对各种零件不稳定。 |
11.1. 基础
Spring Shell 提供了许多 Utilities 和 Comments,以帮助测试您的应用程序。
测试支持由两个模块提供:包含核心项,并支持测试的自动配置。spring-shell-test
spring-shell-test-autoconfigure
测试交互式命令。
@ShellTest
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
class InteractiveTestSample {
@Autowired
ShellTestClient client;
@Test
void test() {
InteractiveShellSession session = client
.interactive()
.run();
await().atMost(2, TimeUnit.SECONDS).untilAsserted(() -> {
ShellAssertions.assertThat(session.screen())
.containsText("shell");
});
session.write(session.writeSequence().text("help").carriageReturn().build());
await().atMost(2, TimeUnit.SECONDS).untilAsserted(() -> {
ShellAssertions.assertThat(session.screen())
.containsText("AVAILABLE COMMANDS");
});
}
}
测试非交互式命令。
@ShellTest
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
class NonInteractiveTestSample {
@Autowired
ShellTestClient client;
@Test
void test() {
NonInteractiveShellSession session = client
.nonInterative("help", "help")
.run();
await().atMost(2, TimeUnit.SECONDS).untilAsserted(() -> {
ShellAssertions.assertThat(session.screen())
.containsText("AVAILABLE COMMANDS");
});
}
}
11.2. 设置
内置仿真默认使用终端宽度 80 和高度 24。 如果输出跨越多个,则更改维度非常有用 行,并且您不想在测试中处理这些情况。
可以使用 properties 或 来更改这些参数。spring.shell.test.terminal-width
spring.shell.test.terminal-height
@ShellTest(properties = {
"spring.shell.test.terminal-width=120",
"spring.shell.test.terminal-height=40"
})
class ShellSettingsSample {}
ShellTest
annotation 具有字段,也可用于更改尺寸。terminalWidth
terminalHeight
@ShellTest(terminalWidth = 120, terminalHeight = 40)
class ShellSettingsSample {}