#command #cli-command #command-line-utilities #cli #test

bin+lib test-exec

Test your command line applications comfortably

1 unstable release

0.1.0 May 6, 2019

#682 in Testing

MIT license

19KB
266 lines

test-exec - Test command line applications comfortably

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

Cargo.toml

[dev-dependencies]
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!{
    "my_bin",
    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.

Features

  • 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:

[dev-dependencies]
test-exec = "0.1.0

And it can be used in code by doing

#[macro_use]
extern crate test_exec;

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

tests/bin.rs

#[macro_use]
extern crate test_exec;

#[test]
fn test_program_output() {
    exec!{
        "my_pwd",
        cwd: "/",
        log: true,
        
        code: 0,
        stdout: b"/\n",
        stderr: []
    };
}

Dependencies

~59KB