#serialization #unit-testing #serde #dev-dependencies

dev serde_test

Token De/Serializer for testing De/Serialize implementations

230 releases (stable)

1.0.177 Aug 5, 2024
1.0.176 Jul 26, 2023
1.0.164 Jun 8, 2023
1.0.159 Mar 28, 2023
0.8.0 Jul 28, 2016

#15 in Testing

Download history 73189/week @ 2024-08-18 76890/week @ 2024-08-25 82100/week @ 2024-09-01 78446/week @ 2024-09-08 77380/week @ 2024-09-15 87579/week @ 2024-09-22 79883/week @ 2024-09-29 89301/week @ 2024-10-06 88238/week @ 2024-10-13 91286/week @ 2024-10-20 83396/week @ 2024-10-27 86822/week @ 2024-11-03 82829/week @ 2024-11-10 77168/week @ 2024-11-17 67067/week @ 2024-11-24 80886/week @ 2024-12-01

311,960 downloads per month
Used in 535 crates (492 directly)

MIT/Apache

92KB
2K SLoC

serde_test   Build Status Latest Version

This crate provides a convenient concise way to write unit tests for implementations of Serialize and Deserialize.

The Serialize impl for a value can be characterized by the sequence of Serializer calls that are made in the course of serializing the value, so serde_test provides a Token abstraction which corresponds roughly to Serializer method calls. There is an assert_ser_tokens function to test that a value serializes to a particular sequence of method calls, an assert_de_tokens function to test that a value can be deserialized from a particular sequence of method calls, and an assert_tokens function to test both directions. There are also functions to test expected failure conditions.

Here is an example from the linked-hash-map crate.

use linked_hash_map::LinkedHashMap;
use serde_test::{assert_tokens, Token};

#[test]
fn test_ser_de_empty() {
    let map = LinkedHashMap::<char, u32>::new();

    assert_tokens(
        &map,
        &[
            Token::Map { len: Some(0) },
            Token::MapEnd,
        ],
    );
}

#[test]
fn test_ser_de() {
    let mut map = LinkedHashMap::new();
    map.insert('b', 20);
    map.insert('a', 10);
    map.insert('c', 30);

    assert_tokens(
        &map,
        &[
            Token::Map { len: Some(3) },
            Token::Char('b'),
            Token::I32(20),
            Token::Char('a'),
            Token::I32(10),
            Token::Char('c'),
            Token::I32(30),
            Token::MapEnd,
        ],
    );
}

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~100–335KB