提交 07cc7d99 编写于 作者: J Johannes Oertel

Change name of unit test sub-module to "tests".

Changes the style guidelines regarding unit tests to recommend using a
sub-module named "tests" instead of "test" for unit tests as "test"
might clash with imports of libtest.
上级 2214860d
% Unit testing
Unit tests should live in a `test` submodule at the bottom of the module they
test. Mark the `test` submodule with `#[cfg(test)]` so it is only compiled when
Unit tests should live in a `tests` submodule at the bottom of the module they
test. Mark the `tests` submodule with `#[cfg(test)]` so it is only compiled when
testing.
The `test` module should contain:
The `tests` module should contain:
* Imports needed only for testing.
* Functions marked with `#[test]` striving for full coverage of the parent module's
......@@ -17,7 +17,7 @@ For example:
// Excerpt from std::str
#[cfg(test)]
mod test {
mod tests {
#[test]
fn test_eq() {
assert!((eq(&"".to_owned(), &"".to_owned())));
......
......@@ -219,10 +219,10 @@ fn it_works() {
This is a very common use of `assert_eq!`: call some function with
some known arguments and compare it to the expected output.
# The `test` module
# The `tests` module
There is one way in which our existing example is not idiomatic: it's
missing the test module. The idiomatic way of writing our example
missing the `tests` module. The idiomatic way of writing our example
looks like this:
```{rust,ignore}
......@@ -231,7 +231,7 @@ pub fn add_two(a: i32) -> i32 {
}
#[cfg(test)]
mod test {
mod tests {
use super::add_two;
#[test]
......@@ -241,7 +241,7 @@ mod test {
}
```
There's a few changes here. The first is the introduction of a `mod test` with
There's a few changes here. The first is the introduction of a `mod tests` with
a `cfg` attribute. The module allows us to group all of our tests together, and
to also define helper functions if needed, that don't become a part of the rest
of our crate. The `cfg` attribute only compiles our test code if we're
......@@ -260,7 +260,7 @@ pub fn add_two(a: i32) -> i32 {
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
#[test]
......@@ -279,7 +279,7 @@ $ cargo test
Running target/adder-91b3e234d4ed382a
running 1 test
test test::it_works ... ok
test tests::it_works ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
......@@ -292,7 +292,7 @@ test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured
It works!
The current convention is to use the `test` module to hold your "unit-style"
The current convention is to use the `tests` module to hold your "unit-style"
tests. Anything that just tests one small bit of functionality makes sense to
go here. But what about "integration-style" tests instead? For that, we have
the `tests` directory
......@@ -325,7 +325,7 @@ $ cargo test
Running target/adder-91b3e234d4ed382a
running 1 test
test test::it_works ... ok
test tests::it_works ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
......@@ -346,7 +346,7 @@ test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured
Now we have three sections: our previous test is also run, as well as our new
one.
That's all there is to the `tests` directory. The `test` module isn't needed
That's all there is to the `tests` directory. The `tests` module isn't needed
here, since the whole thing is focused on tests.
Let's finally check out that third section: documentation tests.
......@@ -382,7 +382,7 @@ pub fn add_two(a: i32) -> i32 {
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
#[test]
......@@ -405,7 +405,7 @@ $ cargo test
Running target/adder-91b3e234d4ed382a
running 1 test
test test::it_works ... ok
test tests::it_works ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured
......
......@@ -384,7 +384,7 @@ pub fn stats_print() {}
}
#[cfg(test)]
mod test {
mod tests {
extern crate test;
use self::test::Bencher;
use boxed::Box;
......
......@@ -933,7 +933,7 @@ fn hash<H: Hasher>(&self, state: &mut H) {
}
#[cfg(test)]
mod test {
mod tests {
use std::clone::Clone;
use std::iter::{Iterator, IntoIterator};
use std::option::Option::{Some, None, self};
......
......@@ -1772,7 +1772,7 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
}
#[cfg(test)]
mod test {
mod tests {
use core::iter::{Iterator, self};
use core::option::Option::Some;
......
......@@ -45,7 +45,7 @@ pub fn test_num<T>(ten: T, two: T) where
}
#[cfg(test)]
mod test {
mod tests {
use core::option::Option;
use core::option::Option::{Some, None};
use core::num::Float;
......
......@@ -202,7 +202,7 @@ fn rand<R: Rng>(other: &mut R) -> ChaChaRng {
#[cfg(test)]
mod test {
mod tests {
use std::prelude::v1::*;
use core::iter::order;
......
......@@ -82,7 +82,7 @@ fn ind_sample<R: Rng>(&self, rng: &mut R) -> f64 {
}
#[cfg(test)]
mod test {
mod tests {
use std::prelude::v1::*;
use distributions::{Sample, IndependentSample};
......
......@@ -276,7 +276,7 @@ fn ind_sample<R: Rng>(&self, rng: &mut R) -> f64 {
}
#[cfg(test)]
mod test {
mod tests {
use std::prelude::v1::*;
use distributions::{Sample, IndependentSample};
......
......@@ -510,7 +510,7 @@ fn rand<R: Rng>(other: &mut R) -> Isaac64Rng {
#[cfg(test)]
mod test {
mod tests {
use std::prelude::v1::*;
use core::iter::order;
......
......@@ -120,7 +120,7 @@ fn default() -> ReseedWithDefault { ReseedWithDefault }
}
#[cfg(test)]
mod test {
mod tests {
use std::prelude::v1::*;
use core::iter::{order, repeat};
......
......@@ -1111,7 +1111,7 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
}
#[cfg(test)]
mod test {
mod tests {
use session::config::{build_configuration, optgroups, build_session_options};
use session::build_session;
......
......@@ -41,7 +41,7 @@ fn realpath(pathname: *const libc::c_char, resolved: *mut libc::c_char)
}
#[cfg(all(not(windows), test))]
mod test {
mod tests {
use tempdir::TempDir;
use std::fs::{self, File};
use super::realpath;
......
......@@ -171,7 +171,7 @@ fn minimize_rpaths(rpaths: &[String]) -> Vec<String> {
}
#[cfg(all(unix, test))]
mod test {
mod tests {
use super::{RPathConfig};
use super::{minimize_rpaths, rpaths_to_flags, get_rpath_relative_to_output};
use std::path::{Path, PathBuf};
......
......@@ -36,7 +36,7 @@
use snapshot_vec::{SnapshotVec, SnapshotVecDelegate};
#[cfg(test)]
mod test;
mod tests;
pub struct Graph<N,E> {
nodes: SnapshotVec<Node<N>> ,
......
......@@ -14,7 +14,7 @@
use snapshot_vec as sv;
#[cfg(test)]
mod test;
mod tests;
/// This trait is implemented by any type that can serve as a type
/// variable. We call such variables *unification keys*. For example,
......
......@@ -198,7 +198,7 @@ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
}
#[cfg(test)]
mod test {
mod tests {
use super::{TocBuilder, Toc, TocEntry};
#[test]
......
......@@ -117,7 +117,7 @@ pub unsafe fn symbol<T>(&self, symbol: &str) -> Result<*mut T, String> {
}
#[cfg(all(test, not(target_os = "ios")))]
mod test {
mod tests {
use super::*;
use prelude::v1::*;
use libc;
......
......@@ -418,7 +418,7 @@ pub fn _print(args: fmt::Arguments) {
}
#[cfg(test)]
mod test {
mod tests {
use thread;
use super::*;
......
......@@ -102,7 +102,7 @@ fn flush(&mut self) -> io::Result<()> { Ok(()) }
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use io::prelude::*;
......
......@@ -346,7 +346,7 @@ fn drop(&mut self) {
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use sync::mpsc::channel;
......
......@@ -63,7 +63,7 @@ fn fill_bytes(&mut self, mut v: &mut [u8]) {
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use super::ReaderRng;
......
......@@ -38,7 +38,7 @@ pub fn log_enabled() -> bool {
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use sys_common;
macro_rules! t { ($a:expr, $b:expr) => ({
......
......@@ -155,7 +155,7 @@ pub fn spawn<F>(blk: F) -> Future<A>
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use sync::mpsc::channel;
use sync::Future;
......
......@@ -1065,7 +1065,7 @@ fn cause(&self) -> Option<&error::Error> {
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use std::env;
......
......@@ -346,7 +346,7 @@ fn next(&mut self) -> Option<*mut Handle<'static, ()>> {
#[cfg(test)]
#[allow(unused_imports)]
mod test {
mod tests {
use prelude::v1::*;
use thread;
......
......@@ -241,7 +241,7 @@ fn drop(&mut self) {
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use sync::Arc;
......
......@@ -361,7 +361,7 @@ pub fn guard_poison<'a, T>(guard: &MutexGuard<'a, T>) -> &'a poison::Flag {
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use sync::mpsc::channel;
......
......@@ -121,7 +121,7 @@ pub fn call_once<F>(&'static self, f: F) where F: FnOnce() {
}
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use thread;
......
......@@ -151,7 +151,7 @@ fn drop(&mut self) {
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use sys_common::remutex::{ReentrantMutex, ReentrantMutexGuard};
use cell::RefCell;
......
......@@ -722,7 +722,7 @@ fn _assert_both<T: Send + Sync>() {}
////////////////////////////////////////////////////////////////////////////////
#[cfg(test)]
mod test {
mod tests {
use prelude::v1::*;
use any::Any;
......
......@@ -1869,7 +1869,7 @@ pub struct MacroDef {
}
#[cfg(test)]
mod test {
mod tests {
use serialize;
use super::*;
......
......@@ -632,7 +632,7 @@ pub fn lit_is_str(lit: &Lit) -> bool {
}
#[cfg(test)]
mod test {
mod tests {
use ast::*;
use super::*;
......
......@@ -949,7 +949,7 @@ pub struct MalformedCodemapPositions {
//
#[cfg(test)]
mod test {
mod tests {
use super::*;
use std::rc::Rc;
......
......@@ -1553,7 +1553,7 @@ fn visit_mac(&mut self, mac: &ast::Mac) {
#[cfg(test)]
mod test {
mod tests {
use super::{pattern_bindings, expand_crate};
use super::{PatIdentFinder, IdentRenamer, PatIdentRenamer, ExpansionConfig};
use ast;
......
......@@ -1343,7 +1343,7 @@ pub fn noop_fold_stmt<T: Folder>(Spanned {node, span}: Stmt, folder: &mut T)
}
#[cfg(test)]
mod test {
mod tests {
use std::io;
use ast;
use util::parser_testing::{string_to_crate, matches_codepattern};
......
......@@ -383,7 +383,7 @@ pub fn gather_comments_and_literals(span_diagnostic: &diagnostic::SpanHandler,
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
#[test] fn test_block_doc_comment_1() {
......
......@@ -1501,7 +1501,7 @@ fn ident_continue(c: Option<char>) -> bool {
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
use codemap::{BytePos, CodeMap, Span, NO_EXPANSION};
......
......@@ -761,7 +761,7 @@ pub fn integer_lit(s: &str, suffix: Option<&str>, sd: &SpanHandler, sp: Span) ->
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
use std::rc::Rc;
use codemap::{Span, BytePos, Pos, Spanned, NO_EXPANSION};
......
......@@ -746,7 +746,7 @@ pub fn fresh_mark() -> ast::Mrk {
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
use ast;
use ext::mtwt;
......
......@@ -3008,7 +3008,7 @@ pub fn print_unsafety(&mut self, s: ast::Unsafety) -> io::Result<()> {
fn repeat(s: &str, n: usize) -> String { iter::repeat(s).take(n).collect() }
#[cfg(test)]
mod test {
mod tests {
use super::*;
use ast;
......
......@@ -142,7 +142,7 @@ pub fn is_whitespace(c: char) -> bool {
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
#[test] fn eqmodws() {
......
......@@ -204,7 +204,7 @@ fn move_map<F>(self, mut f: F) -> SmallVector<T> where F: FnMut(T) -> T {
}
#[cfg(test)]
mod test {
mod tests {
use super::*;
#[test]
......
......@@ -573,7 +573,7 @@ fn format(val: Param, op: FormatOp, flags: Flags) -> Result<Vec<u8> ,String> {
}
#[cfg(test)]
mod test {
mod tests {
use super::{expand,Param,Words,Variables,Number};
use std::result::Result::Ok;
......
......@@ -345,7 +345,7 @@ pub fn msys_terminfo() -> Box<TermInfo> {
}
#[cfg(test)]
mod test {
mod tests {
use super::{boolnames, boolfnames, numnames, numfnames, stringnames, stringfnames};
......
......@@ -11,7 +11,7 @@
// compile-flags:--test
// ignore-pretty turns out the pretty-printer doesn't handle gensym'd things...
mod test {
mod tests {
use super::*;
#[test]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册