Expand description
Semi-persistent, scoped test directories
This module provides a convenient way to have an empty directory for tests which can be inspected after the test run in a predicatable location. On subsequent test runs the directory trees of previous runs will be cleaned up to keep the total number of directories limited.
§Quickstart
mod tests {
use std::path::PathBuf;
use testdir::testdir;
#[test]
fn test_write() {
let dir: PathBuf = testdir!();
let path = dir.join("hello.txt");
std::fs::write(&path, "hi there").ok();
assert!(path.exists());
}
#[test]
fn test_nonexisting() {
let dir: PathBuf = testdir!();
let path = dir.join("hello.txt");
assert!(!path.exists());
}
}
For each cargo test
invocation this will create a directory named testdir-$N
in the
cargo target directory. The number suffix will increase each time you run the tests and
a testdir-current
symlink is created to the most recent suffix created. Only the 8
most recent directories are kept so that this does not keep growing forever.
Inside the numbered directory you will find a directory structure resembling your
crate’s modules structure. For example if the above tests are in lib.rs
of a crate
called mycrate
, than on my UNIX system it looks like this:
$ tree target/
target/
+- testdir-0/
| +- tests/
| +- test_nonexisting/
| +- test_write/
| +- hello.txt
+- testdir-current -> testdir-0
Macros§
- init_
testdir - Initialises the global
NumberedDir
used by thetestdir
macro. - testdir
- Creates a test directory at the requested scope.
Structs§
- Numbered
Dir - A sequentially numbered directory.
- Numbered
DirBuilder - Builder to create a
NumberedDir
. - Numbered
DirIter - Iterator of
NumberedDir
entries.
Constants§
- KEEP_
DEFAULT - The default number of test directories retained by
NumberedDirBuilder
andtestdir!
:8
. - ROOT_
DEFAULT - Default to build the
root
forNumberedDirBuilder
andtestdir!
from:testdir
.
Functions§
- with_
testdir - Executes a function passing the global
NumberedDir
instance.