summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md84
1 files changed, 84 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..2bce129
--- /dev/null
+++ b/README.md
@@ -0,0 +1,84 @@
+# Mockall
+
+A powerful mock object library for Rust.
+
+[![Build Status](https://api.cirrus-ci.com/github/asomers/mockall.svg)](https://cirrus-ci.com/github/asomers/mockall)
+[![Crates.io](https://img.shields.io/crates/v/mockall.svg)](https://crates.io/crates/mockall)
+[![Documentation](https://docs.rs/mockall/badge.svg)](https://docs.rs/mockall)
+
+## Overview
+
+Mock objects are a powerful technique for unit testing software. A mock object
+is an object with the same interface as a real object, but whose responses are
+all manually controlled by test code. They can be used to test the upper and
+middle layers of an application without instantiating the lower ones, or to
+inject edge and error cases that would be difficult or impossible to create
+when using the full stack.
+
+Statically typed languages are inherently more difficult to
+mock than dynamically typed languages. Since Rust is a statically typed language,
+previous attempts at creating a mock object library have had mixed results. Mockall
+incorporates the best elements of previous designs, resulting in it having a rich
+feature set with a terse and ergonomic interface. Mockall is written in 100% *safe*
+and *stable* Rust.
+
+## Usage
+
+Typically mockall is only used by unit tests. To use it this way, add this to
+your `Cargo.toml`:
+
+```toml
+[dev-dependencies]
+mockall = "0.11.4"
+```
+
+Then use it like this:
+
+```rust
+#[cfg(test)]
+use mockall::{automock, mock, predicate::*};
+#[cfg_attr(test, automock)]
+trait MyTrait {
+ fn foo(&self, x: u32) -> u32;
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn mytest() {
+ let mut mock = MockMyTrait::new();
+ mock.expect_foo()
+ .with(eq(4))
+ .times(1)
+ .returning(|x| x + 1);
+ assert_eq!(5, mock.foo(4));
+ }
+}
+```
+
+See the [API docs](https://docs.rs/mockall) for more information.
+
+# Minimum Supported Rust Version (MSRV)
+
+Mockall is supported on Rust 1.42.0 and higher. Mockall's MSRV will not be
+changed in the future without bumping the major or minor version.
+
+# License
+
+`mockall` is primarily distributed under the terms of both the MIT license
+and the Apache License (Version 2.0).
+
+See LICENSE-APACHE, and LICENSE-MIT for details
+
+# Acknowledgements
+
+Mockall was not built in a day. JMock was probably the first popular mock
+object library. Many ports and imitations have been made, including GoogleMock
+for C++. Mockers, inspired by GoogleMock, was the first attempt to bring the
+concept to Rust. The now-defunct Mock_derive was the first library to generate
+mock objects with procedural macros, greatly reducing the user's workload.
+Mockall also uses proc macros, and copies many of Mockers' features and
+conventions. Mockall also takes inspiration from Simulacrum's internal design,
+and its technique for mocking generic methods.