当你在包里运行测试的时候,rust会检查你的文档注释里的代码片段,为每个代码片段构建一个独立的可执行程序链接到库(类似集成测试),并运行它们。
当你用cargo test --verbose运行测试的时候,你会发现它用rustdoc --test来运行文档测试,rustdoc把代码片段放到单独的文件里,用样板代码(包含main函数和库引用)包住,编译并运行。
文档测试的目的不是把所有测试放到文档注释中,而是编写正确的文档,让rust保证你的代码片段是经过测试运行的。
有些时候在代码片段里的某些代码行在文档里不重要,不需要展示在文档里,但是又不能影响测试,可以在代码行前面加上#和1个空格。
有时候代码片段需要展示完整的代码(包含main函数和库引入),显然这时候你不希望rust自动给你包一层样板代码了,那样反而编译不通过。rust会自动识别,当你的代码片段包含main函数的时候,它认为是完整的代码,不会再添加样板代码了。
文档里的代码片段可以禁用测试,用\```no_run和尾部的\```包住。假如还不想代码片段被编译,可以用\```ignore替代\```no_run。假如代码片段甚至不是rust语言的,可以在\```后面加语言的名称,比如\```c++或者\```text。rust并不认识这些语言,这种代码块也不会在生成的文档中高亮了。
