11. 测试

由于各种原因,测试 cli 应用程序很困难:spring-doc.cn

  • 操作系统之间存在差异。spring-doc.cn

  • 在 OS 中,可能使用不同的 shell 实现。spring-doc.cn

  • 什么进壳又什么出壳 我完全是 由于控制字符,您在 shell 本身中看到的不同。spring-doc.cn

  • Shell 可能感觉是同步的,但很可能不是 其中写入了某些内容,您不能假设 Next Update 在 在它不是最终的。spring-doc.cn

测试支持目前正在开发中,并将会 对各种零件不稳定。

11.1. 基础

Spring Shell 提供了许多 Utilities 和 Comments,以帮助测试您的应用程序。 测试支持由两个模块提供:包含核心项,并支持测试的自动配置。spring-shell-testspring-shell-test-autoconfigurespring-doc.cn

测试交互式命令。spring-doc.cn

@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");
		});
	}
}

测试非交互式命令。spring-doc.cn

@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。 如果输出跨越多个,则更改维度非常有用 行,并且您不想在测试中处理这些情况。spring-doc.cn

可以使用 properties 或 来更改这些参数。spring.shell.test.terminal-widthspring.shell.test.terminal-heightspring-doc.cn

@ShellTest(properties = {
	"spring.shell.test.terminal-width=120",
	"spring.shell.test.terminal-height=40"
})
class ShellSettingsSample {}

ShellTestannotation 具有字段,也可用于更改尺寸。terminalWidthterminalHeightspring-doc.cn

@ShellTest(terminalWidth = 120, terminalHeight = 40)
class ShellSettingsSample {}