1 个不稳定版本
0.0.1 | 2023年5月8日 |
---|
#60 in #bar
用于 querydown
11KB
184 行
Testcase Markdown
这是一个小型工具,允许你在 Markdown 文件中编写 Rust 代码的测试用例。如果你正在管理大量针对在字符串上操作(如解析器、格式化器、转换器等)的代码的测试用例,这可能很有用。
用法
-
用 Markdown 编写一些测试用例
# Tests ```toml options foo = 42 bar = "This options value gets carried through to all tests in child headings" ``` ## The first test ``` This is the first argument ``` ``` This is the second argument ``` ## The second test ```toml options bar = "This is a new options value to be used only within this test" ``` ``` Argument ``` ``` blah blah ```
-
在 Markdown 中
- 使用标题来组织你的测试。你可以随意嵌套它们。
- 使用
options
标记代码块以将它们传递给选项序列化器。选项将被继承到子标题下的测试中。 - 通过其他代码块(即 未标记为
options
)传递给测试的位置参数。这些代码块可以与任何语言关联。 - 标题和代码块是解析器关心的唯一内容。如果你想,可以使用段落为测试添加注释。
-
编写读取 Markdown 的测试
#[cfg(test)] mod tests { use super::*; use testcase_markdown::{get_test_cases, MergeSerialized, TestCase}; use std::path::PathBuf; use toml::{from_str, Table}; #[derive(Default, PartialEq, Eq, Debug, Clone, Copy)] struct Options { foo: i64, bar: bool, } impl MergeSerialized for Options { fn merge_serialized(&self, source: String) -> Result<Self, String> { // Write some logic here to deserialize your options and merge them // with higher-level options. let values = from_str::<Table>(&source).map_err(|e| e.to_string())?; Ok(Options { foo: values .get("foo") .and_then(|v| v.as_integer()) .unwrap_or(self.foo), bar: values .get("bar") .and_then(|v| v.as_bool()) .unwrap_or(self.bar), }) } } #[test] fn test_basic() { let markdown_content = get_your_markdown_content_from_a_file_or_elsewhere(); let test_cases = get_test_cases(markdown_content, Options::default()); for test_case in test_cases { // Run your test logic here } } }
-
在你的测试中,每个测试用例看起来像这样
pub struct TestCase<Options> { pub name: String, pub headings: Vec<String>, pub line_number: usize, pub options: Options, pub args: Vec<String>, }
依赖
~1MB
~29K SLoC