# Sham

[](https://crates.io/crates/sham)
[](https://github.com/danwilliams/sham/actions/workflows/ci.yml)
[](https://docs.rs/crate/sham/latest)

> /ʃam/\
> *noun* - a thing that is not what it is purported to be.\
> *adjective* - not genuine; fake or false.\
> *verb* - falsely present something as the truth.
Sham is a collection of useful mocks and fakes for testing Rust code. The
primary purpose is to be able to swap out a genuine implementation and
substitute it with a sham one, in order to achieve deterministic testing
without side effects.
This is particularly useful for testing code that usually performs a particular
operation that is either expensive, slow, or has side effects that are
undesirable in a test environment, such as sending network requests. In these
cases, a sham implementation can be used to simulate the real one, without
actually performing the operation.
The modules provided are:
- [`reqwest`](#reqwest)
- [`std_process`](#std_process)
Note, each module is behind a feature flag, in order to keep the crate size down
for those who don't need all the functionality.
## `reqwest`
The [`reqwest`](https://docs.rs/sham/latest/sham/reqwest/index.html) module
provides mocks for the [Reqwest](https://docs.rs/reqwest/) crate, which is a
popular HTTP client for Rust.
## `std_process`
The [`std_process`](https://docs.rs/sham/latest/sham/std_process/index.html)
module provides mocks for the [Rust standard library's process module](https://doc.rust-lang.org/std/process/),
mainly and most notably [`Command`](https://doc.rust-lang.org/std/process/struct.Command.html).