2 个版本
使用旧的 Rust 2015
0.1.1 | 2017年3月24日 |
---|---|
0.1.0 | 2017年1月28日 |
803 在 测试 中
9KB
test-patience
test-patience 是一个同步集成测试中应用启动和测试本身的工具。
在编写集成测试时,通常需要启动测试中的一部分应用。这可能会花费一些时间,如果测试必须等待应用运行,则在等待固定时间的过程中会浪费宝贵的时间。此外,即使等待固定时间,也可能导致测试失败而不会产生清晰的错误信息。test-patience 会等待直到启动的应用发出已准备好的信号或指定的超时时间已过。
测试需要创建 Server
结构体的实例,该结构体会启动一个 TCP 服务器并返回一个端口号。这个端口号需要发送给需要执行测试的应用。这可以通过环境变量、参数或配置文件来完成。在启动应用后,需要调用 wait
方法。它会阻塞当前运行的线程,直到启动的应用发出成功的启动信号或 timeout
期限已过。
当应用准备好时,它需要创建 Client
结构体的实例,并使用正确的端口号调用 notify
方法。之后,测试的线程将继续执行。
为了在发布构建中禁用启动通知,请使用 cfg!(debug_assertions)
(参见 条件编译)。
示例
应用
use std::env;
// initialize application (eg. connect to database server)
let db_connection = get_db_connection();
// notify test in case the environment variable TEST_PATIENCE_PORT is set
if let Some(port) = env::var("TEST_PATIENCE_PORT").ok()
.and_then(|s| s.parse::<u16>().ok()) {
test_patience::Client::notify(port).unwrap();
}
测试
use std::time::Duration;
use std::process;
let server = test_patience::Server::new().unwrap();
let port = server.port().unwrap();
let process = process::Command::new("path/to/application")
.env("TEST_PATIENCE_PORT", format!("{}", port))
.spawn()
.unwrap();
server.wait(Duration::from_secs(5)).unwrap();