Test CLI Applications - This crate checks the output of a child process is as expected.
For your tests, add it to your Cargo.toml
:
[dev-dependencies]
assert_cli = "0.5"
Here's a trivial example:
extern crate assert_cli;
fn main() {
assert_cli::Assert::main_binary().unwrap();
}
And here is one that will fail (and demonstrates running arbitrary commands):
extern crate assert_cli;
fn main() {
assert_cli::Assert::command(&["ls", "foo-bar-foo"])
.fails()
.and()
.stderr().contains("foo-bar-foo")
.unwrap();
}
If you want to match the program's output exactly, you can use
stdout().is
(and shows the macro form of command
):
#[macro_use] extern crate assert_cli;
fn main() {
assert_cmd!(wc "README.md")
.stdout().is("1337 README.md")
.unwrap();
}
... which has the benefit to show a nice, colorful diff in your terminal, like this:
-1337
+92
Tip: Enclose arguments in the assert_cmd!
macro in quotes "
,
if there are special characters, which the macro doesn't accept, e.g.
assert_cmd!(cat "foo.txt")
.
Assert Cli use Environment underneath to deal with environment variables.
More detailed information is available in the documentation. :-)
Other crates that might be useful in testing command line programs.
- dir-diff for testing file side-effects.
- tempfile for scratchpad directories.
- duct for orchestrating multiple processes.
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.