[
  {
    "path": "README.md",
    "content": "# Awesome Rust Testing\n\n**WANT TO HELP??** please help up by adding more things or even better: evaluating the things on the list\n* Are the things still maintained? Can we add badges here? short descriptions? Quality Control\n\n## Books\n* [awesome-mdbook (general)](https://github.com/softprops/awesome-mdbook) \n* [PropTesting](https://altsysrq.github.io/proptest-book/intro.html)\n* [CommandLineApplications#testing](https://rust-lang-nursery.github.io/cli-wg/tutorial/testing.html)\n* [Fuzzing Book](https://rust-fuzz.github.io/book/)\n   \n## Crates\n\nTurns out, there is an entire subcategory on crates.io [Development tools::Testing](https://crates.io/categories/development-tools::testing)\n\n### Extensions\n* [rstest](https://github.com/la10736/rstest) - Fixture-based test framework for Rust\n* [ntest](https://github.com/becheran/ntest) - Testing framework for rust enhancing the built-in library with some useful features\n* [nextest](https://nexte.st/) - test runner\n* [assay](https://github.com/mgattozzi/assay) - super powered testing macro\n\n### Mocking\n* [MockAll](https://crates.io/crates/mockall) ([Examples](https://crates.io/crates/mockall_examples), [Derive Macro](https://crates.io/crates/mockall_derive))\n* [Mocktopus](https://crates.io/crates/mocktopus)\n* [mock_derive](https://crates.io/crates/mock_derive)\n* [mockers](https://crates.io/crates/mockers)\n* [simulacrum](https://crates.io/crates/simulacrum)\n* [Mockiato](https://crates.io/crates/mockiato)\n* [mockito](https://docs.rs/mockito/0.21.0/mockito/)(http mocks)\n* [faux](https://github.com/nrxus/faux)\n* [wiremock](https://crates.io/crates/wiremock)\n* [unimock](https://crates.io/crates/unimock)\n\n### Snapshop Testing\n\n* [Insta](https://crates.io/crates/insta) + [cargo-insta](https://crates.io/crates/cargo-insta)\n\n### Matchers\n\n* [matches](https://crates.io/crates/matches)\n* [assert matches](https://crates.io/crates/assert_matches)\n* [fuzzy matcher](https://crates.io/crates/fuzzy-matcher)\n* [try_match](https://crates.io/crates/try_match)\n* [K9](https://github.com/aaronabramov/k9)\n\n### Generated output matchers\n\n* [specker](https://crates.io/crates/specker) A framework to collect test inputs and expected outputs from multiple files and check them. Used to test code generation (last update 2017, *needs way more examples*)\n\n### [Diffing](https://crates.io/keywords/diff)\n* [prettydiff](https://crates.io/crates/prettydiff)\n* [differ](https://crates.io/crates/differ)\n\n### [Assertions](https://crates.io/keywords/assert)\n* [assert](https://crates.io/crates/assert)\n* [galvanic-assert](https://crates.io/crates/galvanic-assert)\n* [difference](https://crates.io/crates/difference)\n* [pretty_assertions](https://crates.io/crates/pretty_assertions)\n* [static assertions](https://crates.io/crates/static_assertions)\n* [spectral](https://crates.io/crates/spectral)\n* [assert_fs](https://crates.io/crates/assert_fs)\n\n### FFI Testing\n* [ctest](https://crates.io/crates/ctest)\n\n### Coverage\n\n* [tarpaulin](https://github.com/xd009642/tarpaulin)\n* [cargo-kcov](https://crates.io/crates/cargo-kcov)\n* [grcov](https://crates.io/crates/grcov)\n* [coverage marks](https://ferrous-systems.com/blog/coverage-marks/)\n\n\n### Fuzzing\n* see the book section\n* [afl.rs](https://github.com/rust-fuzz/afl.rs)\n* [cargo-fuzz](https://crates.io/crates/cargo-fuzz)\n* [honggfuzz](https://crates.io/crates/honggfuzz)\n\n### Property Testing\n* https://crates.io/crates/quickcheck https://crates.io/crates/quickcheck_macros\n\n* https://crates.io/crates/proptest https://crates.io/crates/proptest-derive\n\n### Parameterized Testing\n* [test-case](https://crates.io/crates/test-case)\n\n### Mutation Testing\n\n* [mutagem](https://crates.io/crates/mutagen)\n* [cargo-mutants](https://github.com/sourcefrog/cargo-mutants)\n* [bough](https://github.com/CodeEnPlace/bough)\n\n### Harnesses/Frameworks\n\n* [rspec](https://crates.io/crates/rspec)  [![Build Status](https://travis-ci.org/rust-rspec/rspec.svg?branch=master)](https://travis-ci.org/rust-rspec/rspec) [![Coverage Status](https://coveralls.io/repos/github/rust-rspec/rspec/badge.svg)](https://coveralls.io/github/rust-rspec/rspec) [![Crates.io](https://img.shields.io/crates/v/rspec.svg?maxAge=2592000)](https://crates.io/crates/rspec) [![Crates.io](https://img.shields.io/crates/l/rspec.svg?maxAge=2592000)](https://github.com/rust-rspec/rspec/blob/master/LICENSE)\n* [speculate](https://crates.io/crates/speculate) [![Build Status](https://travis-ci.org/utkarshkukreti/speculate.rs.svg?branch=master)](https://travis-ci.org/utkarshkukreti/speculate.rs) [![speculate at crates.io](https://img.shields.io/crates/v/speculate.svg)](https://crates.io/crates/speculate)\n* [Shiny](https://github.com/farcaller/shiny) (last commit 2016)\n* [rstest](https://github.com/la10736/rstest) *a Fixture based Testing Framwork*\n\n### Test Generation\n\n* [test-generator](https://crates.io/crates/test-generator) creates tests based on files\n\n### Model Based Testing\n\n* [model](https://crates.io/crates/model)\n\n### Testing Webservices\n\n* https://crates.io/crates/drill\n\n\n### More Cargo Tools\n* Testing feature combinations: [cargo featomatic](https://github.com/Nemo157/cargo-featomatic) (incomplete, help welcome)\n* \"Testing\" licenses [https://github.com/Nemo157/cargo-lichking](https://github.com/Nemo157/cargo-lichking)\n* Look for possible security vulnerabilities: https://github.com/RustSec/cargo-audit\n\n### Testing Documentation\n* https://crates.io/crates/skeptic\n* https://crates.io/crates/docmatic\n\n### Testing CommandLine Applications\n* https://crates.io/crates/assert_cmd\n* [assert_cli](https://crates.io/crates/assert_cli): the sucessor is [assert_cmd](https://crates.io/crates/assert_cmd)\n\n## CI\n\n* [crate-ci book](https://crate-ci.github.io/) contains general suggestions on maintaining high crate quality\n* [Azure Pipelines](https://crate-ci.github.io/azure-pipelines/) contains great templates for cross-platform testing\n\n## BlogPosts\n* [How Rust is Tested](https://brson.github.io/2017/07/10/how-rust-is-tested)\n* **[Mocking libraries comparison](https://asomers.github.io/mock_shootout/)**\n* [On Mocking Rust](https://tech.labs.oliverwyman.com/blog/2018/05/21/on-mocking-rust/)\n* [Mocking in Rust with conditional compilation](https://klau.si/blog/mocking-in-rust-with-conditional-compilation/)\n* [How to Mock Time in Rust Tests and Cargo Gotchas We Met](https://blog.iany.me/2019/03/how-to-mock-time-in-rust-tests-and-cargo-gotchas-we-met/)\n* [Kcov and tarpaulin code coverage](https://blog.knoldus.com/bid-adieu-to-tarpaulin-html-reports-are-here-for-rust/)\n* [Tutorial: How to collect test coverages for Rust project](https://users.rust-lang.org/t/tutorial-how-to-collect-test-coverages-for-rust-project/650/14)\n* [Rust Code Coverage Guide: kcov + Travis CI + Codecov / Coveralls](https://sunjay.dev/2016/07/25/rust-code-coverage)\n* [Performance Testing on Travis CI](https://beachape.com/blog/2016/11/02/rust-performance-testing-on-travis-ci/)\n* [Coverage with kcov + Travis CI + Codecov / Coveralls](https://sunjay.dev/2016/07/25/rust-code-coverage)\n* [Testing a Rust Command Line Tool](https://mattgathu.github.io/testing-rust-cli-apps/)(for [assert_cli](https://crates.io/crates/assert_cli))\n* [Rust Mutation Testing](https://llogiq.github.io/2016/03/24/mutest.html)(for [mutagem](https://crates.io/crates/mutagen))\n* [Testing With Unused Arguments](https://llogiq.github.io/2015/08/17/test.html)\n\n## Talks\n* [Testing strategies and pattern for efficient TDD in Rust by Thomas Wickham](https://www.youtube.com/watch?v=U3F7uAOCjEo)\n\n## Patterns\n* [entrait](https://crates.io/crates/entrait)\n\n## Other Awesomes\n\n* [zonyitoo awesome#testing](https://github.com/zonyitoo/awesome-rust#testing)\n* [rust-unofficial awesome#testing](https://github.com/rust-unofficial/awesome-rust#testing)\n* [for completenes, this one has no testing section](https://github.com/queenypingcap/awesome-rust)\n* [rust learning:ci/testing](https://github.com/ctjhoa/rust-learning#ci--testing)\n* [eRFC 2318: custom tests frameworks](https://github.com/rust-lang/rust/issues/50297)\n"
  }
]