# qutonium

github crates.io docs.rs Crates.io

--- > *simplify unit testing with a minimal testing framework* 📈 ## DISCLAIMER [qutonium](https://github.com/qurity/qutonium) is takes is inspiration from the [rust-testing-microframework](https://github.com/wilkie/rust-testing-microframework). the goal is to provide a minimal testing framework for assertions (see the list of features [here](#goals)). the project is still in work in progress so.. DO NOT USE IN PRODUCTION. DO NOT USE IN PRODUCTION. DO NOT USE IN PRODUCTION. feedbacks appreciated! ## Examples more examples [here](https://github.com/qurity/qutonium/tree/master/examples) **basic syntax** ```rust fn main () {} #[cfg(test)] mod tests { extern crate qutonium; use qutonium::prelude::*; #[test] fn from_test () { suite!("the suite case name ~basic", { "compare integer" || { expect!(2 + 2).to(be_equal(4)); } }); } } ``` **sugar syntax** ```rust fn main () {} #[cfg(test)] mod tests { extern crate qutonium; use qutonium::prelude::*; #[test] fn from_test () { suite!("the suite case name ~sugar", { "compare integer" || { must!(2 + 2; be 4); } }); } } ``` ## Overview **stdout** The output format follow the syntax from `crystal` | `ruby`. s/o [Siegfried Ehret](https://ehret.me/fr/crystal-01.html) ``` SUITE the suite case name TEST compare integer (0ms) ERROR 👎 received: <0> expected: <1> 📍 src/main.rs:7:7 END END TEST compare boolean (0ms) SUCCESS 👍 ok 📍 src/main.rs:12:7 END END TEST testing should panic (0ms) SUCCESS 👍 ok 📍 src/main.rs:16:7 END END END DIAGNOSTIC 👎 failed: 1 👍 passed: 2 📈 total: 3 END ``` ## Usage Add the following to your Cargo.toml: ```toml [dependencies] qutonium = "0.1.3" ``` ## Goals * [x] describe suite case | `suite!` * [x] test function | * [x] assertions | `expect` * [x] marker | `not` & `to` * [x] `matchers` | see the complete list here * [ ] extended `matchers` * [ ] custom `matchers` * [ ] diagnostics * [x] error `location` * [ ] helpful error messages * [ ] sugar syntax * [ ] no nested suites * [ ] inline stdout * [x] colorized terminal output | using [qute](https://github.com/qurity/qute) crate * [ ] `snapshot` diff | using [differences](https://github.com/johannhof/difference.rs) crate * [x] extended `matchers` * [x] hooks | `before:all`, `before:each`, `after:all` and `after:each` * [ ] export `json`, `xml` | [generic execution format](https://docs.sonarqube.org/latest/analysis/generic-test/#header-2) for sonar *(xml only)* * [ ] Exclude test cases | `skip` and `only` * [ ] `store` | state container * [ ] should `panic` can be testing * [ ] writing unit testing * [ ] documentation ## API ### Exports **json** | handler | snippet | |---------|---------------------------------------------------------------------| | to_json | see more informations about the export [here](./doc/export/json.md) | ### Markers | marker | snippet | |---------|----------------------------| | to | `expect!(expr).to(matcher)` | | not | `expect!(expr).not(matcher)` | ### Matchers **boolean** | matcher | snippet | |-----------|---------------------------------| | be_false | `expect!(expr).to(be_false())` | | be_true | `expect!(expr).to(be_true())` | **common** | matcher | snippet | |-------------|--------------------------------------| | be_equal | `expect!(expr).to(be_equal(expr))` | ## License Copyright Šī¸ 2020 Qurity Released under the [MIT](LICENSE) license