#cli #command #test #testing

bin+lib test-exec

Test your command line applications comfortably

1 unstable release

0.1.0 May 6, 2019

#93 in #command

MIT license

266 lines

test-exec - Test command line applications comfortably

travis-badge appveyor-badge crates.io-badge license-badge


test-exec = "0.1.0

test-exec is a Rust testing library to help you at testing the output of a command line application. It aims for maximum comfort, and wants to prevent messing around with Command.

The main functionality is the exec macro: it executes your command, verifies the output and is highly customizable.

A few previews, assuming you have a binary target called my_bin:

  • minimum configuration: exec!("my_bin");

  • (almost) maximum configuration:

let output = exec!{
    args: ["-p", "/"],
    cwd: "/tmp",
    env: {
        THREADS: "4"
    stdin: b"show-hidden",
    timeout: 60000,
    log: true,

    code: 0,
    stdout: b"Started program...\nDone.\n",
    stderr: []

// `output` can be used here like a normal process::Output

If the program exits with any other code than 0, a different stdout or stderr, or is running longer than 60 seconds, a panic occurs.

As you might have noticed, the bin target is added to the PATH automatically.

See the documentation for more.


  • set the arguments, current working directory, environment and stdin with one line each
  • exit code, stdout, stderr and optionally termination signal comparison directly through the macro
  • automatic availability of bin targets
  • all output of the program is returned for additional use

Installation and usage

As test-exec is a testing library, it should be added to the dev-dependencies:

test-exec = "0.1.0

And it can be used in code by doing

extern crate test_exec;

For instance in an integration test for a binary called my_pwd, whichs prints the current working directory


extern crate test_exec;

fn test_program_output() {
        cwd: "/",
        log: true,
        code: 0,
        stdout: b"/\n",
        stderr: []