#serialization #deserialize #serde #unit-testing #test

无 std dev serde_assert

用于测试 serde 序列化和反序列化实现的测试库

9 个版本 (破坏性更新)

0.8.0 2024年6月27日
0.7.1 2023年12月26日
0.6.0 2023年11月19日
0.5.0 2023年5月17日
0.1.0 2023年1月14日

#131 in 编码

Download history 6283/week @ 2024-05-02 7445/week @ 2024-05-09 6578/week @ 2024-05-16 6441/week @ 2024-05-23 7472/week @ 2024-05-30 8342/week @ 2024-06-06 9640/week @ 2024-06-13 9655/week @ 2024-06-20 12583/week @ 2024-06-27 10507/week @ 2024-07-04 10453/week @ 2024-07-11 15979/week @ 2024-07-18 11865/week @ 2024-07-25 11443/week @ 2024-08-01 11002/week @ 2024-08-08 10844/week @ 2024-08-15

51,773 每月下载量
用于 6 crates

MIT/Apache

295KB
7K SLoC

serde_assert

GitHub Workflow Status codecov.io crates.io docs.rs MSRV License

用于测试 serdeSerializeDeserialize 实现的测试库。

此库提供了一个 SerializerDeserializer,用于编写单元测试以断言手动 SerializeDeserialize 实现的行为。可以通过表示泛型序列化状态的 Token 序列来验证实现行为。

用法

以下示例使用 claims crate 进行方便的断言。

测试序列化

Serializer 返回表示值的序列化的一系列 Token。可以检查返回的 Token 是否等于预期值。

use claims::assert_ok_eq;
use serde::Serialize;
use serde_assert::{
    Serializer,
    Token,
};

let serializer = Serializer::builder().build();

assert_ok_eq!(true.serialize(&serializer), [Token::Bool(true)]);

测试反序列化

通过提供一系列要反序列化为值的 Token,可以构建一个 Deserializer

use claims::assert_ok_eq;
use serde::Deserialize;
use serde_assert::{
    Deserializer,
    Token,
};

let mut deserializer = Deserializer::builder([Token::Bool(true)]).build();

assert_ok_eq!(bool::deserialize(&mut deserializer), true);

serde_test 的比较

该软件包在牺牲更多冗长的情况下提供了比 serde_test 更多的灵活性。虽然 serde_test 提供了一组简单的断言函数的小 API,但此软件包将需要您调用 serialize()deserialize() 并自行断言结果是否符合预期。

虽然一些用户可能会发现 serde_test 较小的 API 对于他们的用例已经足够,但其他人会发现该软件包的灵活性使得测试更复杂的 SerailizeDeserialize 实现变得更加容易。此软件包的 API 提供以下优势

  • 直接访问 SerializerDeserializer,允许使用 serde 的所有部分 SerializerDeserializer API,例如反序列化实现了 DeserializeSeed 的类型。
  • 自定义 SerializerDeserializer,允许配置如可读性、是否将 Deserializer 解释为自描述的 Token 序列以及零拷贝反序列化等。
  • 对序列化 Token 序列的复杂比较,包括允许测试其序列化形式可以包含任意顺序的项目,例如在序列化 HashSet 时。

最低支持的 Rust 版本

此软件包保证在稳定的 rustc 1.56.0 及以上版本上编译。

许可协议

此项目根据您的要求,采用以下任一许可协议

进行选择。

贡献

除非您明确表示,否则根据 Apache-2.0 许可证的定义,您有意提交以包含在作品中的任何贡献,都将根据上述内容双许可,不附加任何额外条款或条件。

依赖项

~110–355KB