#枚举 #变体 #测试 #特质 #字符串 #生成 #

every_variant

提供EveryVariant特质,为类型提供every_variant方法。允许您轻松生成包含枚举的结构或嵌套枚举树中的所有变体的组合。这有助于对使用嵌套枚举树的代码路径进行额外的测试。

8个版本

0.4.5 2023年10月27日
0.4.4 2022年3月24日
0.4.3 2021年9月14日
0.2.1 2021年1月12日
0.2.0 2020年9月30日

#619 in 数据结构

Download history 1028/week @ 2024-04-10 788/week @ 2024-04-17 1698/week @ 2024-04-24 469/week @ 2024-05-01 568/week @ 2024-05-08 489/week @ 2024-05-15 1157/week @ 2024-05-22 773/week @ 2024-05-29 310/week @ 2024-06-05 950/week @ 2024-06-12 362/week @ 2024-06-19 649/week @ 2024-06-26 137/week @ 2024-07-03 25/week @ 2024-07-10 120/week @ 2024-07-17 361/week @ 2024-07-24

735 每月下载量

MIT 许可证

18KB
381

every_variant

提供EveryVariant特质,为类型提供every_variant()方法。允许您轻松生成包含枚举的结构或嵌套枚举树中的所有变体的组合。这有助于对使用嵌套枚举树的代码路径进行额外的测试。

EveryVariant derive宏将为您提供every_variant()方法,并为标准类型(如浮点数、整数和字符串)提供一些预设值。

在最低级别生成的数据目前固定为特定值。如果您有依赖于特定格式的字符串的类型,例如,我建议将这些类型单独创建,并手动为这些类型实现every_variant。

示例


use every_variant::EveryVariant;

/// Type of the message
#[derive(EveryVariant, Debug, Clone)]
enum MessageType {
    Codified,
    Markdown,
    Html,
}

/// This type should generate 4 different variant
#[derive(EveryVariant, Debug, Clone)]
struct FormattedMessage {
    /// Enum dictating how to render the string, None means its hidden
    rendermethod: Option<MessageType>,
    /// The optional content of the message
    text: String,
}

fn main() {
    let all_diferent_messages = FormattedMessage::every_variant();
    println!("{:#?}", all_diferent_messages);
}


输出将是

[
    FormattedMessage {
        rendermethod: None,
        text: "example String",
    },
    FormattedMessage {
        rendermethod: Some(
            Codified,
        ),
        text: "example String",
    },
    FormattedMessage {
        rendermethod: Some(
            Markdown,
        ),
        text: "example String",
    },
    FormattedMessage {
        rendermethod: Some(
            Html,
        ),
        text: "example String",
    },
]

依赖项

~1.2–1.7MB
~39K SLoC