[][src]Crate assert_cmd

Assert Command - Easy command initialization and assertions.

assert_cmd includes support for:

[dependencies]
assert_cmd = "0.10"

Overview

Create a Command:

Configure a Command:

Validate either a Command or Output:

Examples

Here's a trivial example:

extern crate assert_cmd;

use std::process::Command;
use assert_cmd::prelude::*;

fn main() {
    let mut cmd = Command::main_binary().unwrap();
    cmd.assert().success();
}

And a little of everything:

extern crate assert_cmd;

use std::process::Command;
use assert_cmd::prelude::*;

fn main() {
    let mut cmd = Command::main_binary().unwrap();
    cmd
        .arg("-A")
        .env("stdout", "hello")
        .env("exit", "42")
        .with_stdin()
        .buffer("42");
    let assert = cmd.assert();
    assert
        .failure()
        .code(42)
        .stdout("hello\n");
}

Relevant crates

Other crates that might be useful in testing command line programs.

  • duct for orchestrating multiple processes.
  • commandspec for easier writing of commands
  • assert_fs for filesystem fixtures and assertions.
  • dir-diff for testing file side-effects.
  • tempfile for scratchpad directories.

Migrating from assert_cli v0.6

assert_cmd is the successor to the original assert_cli:

  • More flexible, reusable assertions (also used by assert_fs).
  • Can integrate with other process-management crates, like duct.
  • Addresses several architectural problems.

Key points in migrating from assert_cli:

  • Command is extended with traits rather than being wrapping in custom logic.
  • The command-under-test is run eagerly, with assertions happening immediately.
  • success() is not implicit and requires being explicitly called.
  • stdout/stderr aren't automatically trimmed before being passed to the Predicate.

Modules

assert

Output assertions.

cargo

Simplify running bins in a Cargo project.

cmd

Simplify one-off runs of programs.

prelude

Extension traits that are useful to have available.

stdin

Write to stdin of a Command.