2 个版本
0.0.2 | 2024年7月13日 |
---|---|
0.0.1 | 2024年7月12日 |
在 命令行界面 中排名第 252
每月下载量 218 次
15KB
129 行代码(不含注释)
r3bl_test_fixtures
这是一个提供可重复使用组件的测试用例库,旨在由 r3bl-open-core
单一仓库中的所有crate使用。此crate旨在成为单一仓库中其他crate的 dev-dependency
。
它提供异步流和标准输出的测试用例,这使得TUI框架能够进行“端到端”测试。
- 异步流测试用例用于测试TUI框架的输入流。
- 标准输出测试用例用于测试TUI框架的输出。
async_stream_fixtures
以下是一个从 Vec
创建 T
流的示例。
#[tokio::test]
async fn test_gen_input_stream() {
use futures_util::StreamExt;
use r3bl_test_fixtures::gen_input_stream;
let mut input_stream = gen_input_stream(vec![1, 2, 3]);
for _ in 1..=3 {
input_stream.next().await;
}
pretty_assertions::assert_eq!(input_stream.next().await, None);
}
以下是如何使用延迟的另一个示例。
#[tokio::test]
async fn test_gen_input_stream_with_delay() {
use futures_util::StreamExt;
use r3bl_test_fixtures::gen_input_stream_with_delay;
let delay = 100;
// Start timer.
let start_time = std::time::Instant::now();
let mut input_stream = gen_input_stream_with_delay(vec![1, 2, 3], Duration::from_millis(delay));
for _ in 1..=3 {
input_stream.next().await;
}
// End timer.
let end_time = std::time::Instant::now();
pretty_assertions::assert_eq!(input_stream.next().await, None);
assert!(end_time - start_time >= Duration::from_millis(delay * 3));
}
stdout_fixtures
以下是如何使用此库的示例。
#[tokio::test]
async fn test_stdout_mock_no_strip_ansi() {
use strip_ansi_escapes::strip;
use super::*;
use std::{
io::{Result, Write},
sync::Arc,
};
let mut stdout_mock = StdoutMock::default();
let stdout_mock_clone = stdout_mock.clone(); // Points to the same inner value as `stdout_mock`.
let normal_text = "hello world";
stdout_mock.write_all(normal_text.as_bytes()).unwrap();
stdout_mock.flush().unwrap();
pretty_assertions::assert_eq!(stdout_mock.get_copy_of_buffer_as_string(), normal_text);
pretty_assertions::assert_eq!(
stdout_mock_clone.get_copy_of_buffer_as_string(),
normal_text
);
}
依赖关系
约9-16MB
约201K 行代码