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

Sea*_*rry 5 unit-testing idioms rust

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

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

我做得对吗?

She*_*ter 6

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

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

    mod test {
        #[test]
        fn is_answer() {
            assert_eq!(42, super::my_func());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,我不同意你应该测试一般的私人东西,但这是一个不同的讨论.

  • 我最初做过这个,但我正在做`使用super ::*`.如果我只是明确地使用super :: some_function`它就像你描述的那样工作.谢谢. (2认同)