Skip to content

Latest commit

 

History

History
43 lines (33 loc) · 1.5 KB

File metadata and controls

43 lines (33 loc) · 1.5 KB

单元测试

serde_test 提供了一个方便简洁的 (concise) 方式为Serialize和Deserialize编写单元测试。

值的序列化可以通过在序列化值的过程中得到的Serializer顺序调用进行表征,因此serde_test提供了一个 Token 抽象,大致对应于Serializer方法调用。它提供了一个assert_ser_tokens函数测试一个值序列化为特定的方法调用序列,assert_de_tokens函数测试一个值可以从特定的方法调用序列中反序列化出来,以及assert_tokens函数同时可以测试这两个功能。它还提供了测试预期错误条件的功能。

在 linked-hash-map crate 中有一个示例。

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

#[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,
    ]);
}