测试私有功能的惯用方法是什么?

时间:2015-07-31 18:33:26

标签: unit-testing rust idioms

使用“测试”模块的Rust书says是进行单元测试的惯用方法。但是,如果该函数未标记为“pub”,我无法在tests模块中看到超级模块的函数。那么如何测试内部函数呢?

我的第一直觉是寻找#ifdef关键字pub的方法。我过去曾为C ++测试做过这个。对于Rust,我所做的只是对模块中的私有函数进行测试,然后在“tests”模块中测试公共接口。

我做得对吗?

2 个答案:

答案 0 :(得分:6)

将测试模块嵌套在包含私有方法或结构的模块中:

mod inners {
    fn my_func() -> u8 { 42 }

    mod test {
        #[test]
        fn is_answer() {
            assert_eq!(42, super::my_func());
        }
    }
}

当然,我不同意你应该测试一般的私人内容,但这是一个不同的讨论。

答案 1 :(得分:3)

测试私有函数的惯用方法不是。单元测试应该测试一个类的公共行为。私有方法只是您应该测试的上述公共方法的实现细节。