#serde #serialization #str #fn #impl #file

conformance

针对 fn(&str) -> impl Serialize 的合规性测试

2 个不稳定版本

0.2.0 2019年10月10日
0.1.0 2019年10月4日

#584 in 测试

MIT/Apache

14KB
258

合规性测试

简单.yaml.测试:

1
===
a=b=c=2<3;
---
- Identifier: 1
- EqualsSign: 1
- Identifier: 1
- EqualsSign: 1
- Identifier: 1
- EqualsSign: 1
- Integer: 1
- LessThanSign: 1
- Integer: 1
- Semicolon: 1
...

test.rs:

use {
    conformance, serde_yaml,
    tinyc_lexer::{tokenize, Token},
};

#[conformance::tests(exact, serde=serde_yaml, file="tests/simple.yaml.test")]
fn lex_tokens(s: &str) -> Vec<Token> {
    tokenize(s).collect()
}

此代码从 ===--- 之间获取输入,将其传递给测试函数,然后使用 ser 函数进行序列化。输出从 ---... 之间获取,然后通过 de序列化和重新序列化进行归一化。使用 assert_eq! 比较两种序列化形式。文件路径相对于 Cargo 清单。

一个合规性测试文件可以包含任意数量的测试。文件名和测试名(在 === 上方)结合并用于命名传递给标准 Rust 测试运行器的测试。

serde 参数代表可能提供的三个参数,按顺序替代其位置

  • ser: fn<T>(&T) -> String(默认 serde::to_string
  • de: fn(&str) -> Result<value, impl Error>(默认 serde::from_str
  • value:一个可以被传递给 ser 的类型(默认 serde::Value

您也可以只提供 serde,并且 value 的默认值是产生的类型。

更多信息,请参阅 dev.to 的公告帖子 或在 Discord 上 @ 我。

依赖项

~1.5MB
~35K SLoC