Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/utkarshkukreti/speculate.rs
An RSpec inspired minimal testing framework for Rust.
https://github.com/utkarshkukreti/speculate.rs
Last synced: 5 days ago
JSON representation
An RSpec inspired minimal testing framework for Rust.
- Host: GitHub
- URL: https://github.com/utkarshkukreti/speculate.rs
- Owner: utkarshkukreti
- Created: 2015-01-01T14:20:13.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2023-05-10T22:37:31.000Z (over 1 year ago)
- Last Synced: 2024-10-19T00:57:03.402Z (16 days ago)
- Language: Rust
- Homepage:
- Size: 84 KB
- Stars: 271
- Watchers: 10
- Forks: 23
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# speculate.rs [![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)
> An RSpec inspired minimal testing framework for Rust.
## Installation
Add `speculate` to the `dev-dependencies` section of your `Cargo.toml`:
```toml
[dev-dependencies]
speculate = "0.1"
```And add the following to the top of the Rust file you want to add tests for:
```rust
#[cfg(test)]
extern crate speculate;#[cfg(test)]
use speculate::speculate; // Must be imported into the current scope.
```## Usage
Speculate provides the `speculate!` syntax extension.
Inside `speculate! { ... }`, you can have any "Item", like `static`, `const`,
`fn`, etc, and 5 special types of blocks:* `describe` (or its alias `context`) - to group tests in a hierarchy, for
readability. Can be arbitrarily nested.* `before` - contains setup code that's inserted before every sibling and nested
`it` and `bench` blocks.* `after` - contains teardown code that's inserted after every sibling and
nested `it` and `bench` blocks.* `it` (or its alias `test`) - contains tests.
For example:
```rust
it "can add 1 and 2" {
assert_eq!(1 + 2, 3);
}
```You can optionally add attributes to this block:
```rust
#[ignore]
test "ignore" {
assert_eq!(1, 2);
}#[should_panic]
test "should panic" {
assert_eq!(1, 2);
}#[should_panic(expected = "foo")]
test "should panic with foo" {
panic!("foo");
}
```* `bench` - contains benchmarks.
For example:
```rust
bench "xor 1 to 1000" |b| {
b.iter(|| (0..1000).fold(0, |a, b| a ^ b));
}
```## Complete Example (from `tests/example.rs`)
```rust
extern crate speculate;use speculate::speculate;
speculate! {
const ZERO: i32 = 0;fn add(a: i32, b: i32) -> i32 {
a + b
}describe "math" {
const ONE: i32 = 1;fn sub(a: i32, b: i32) -> i32 {
a - b
}before {
let two = ONE + ONE;
}it "can add stuff" {
assert_eq!(ONE, add(ZERO, ONE));
assert_eq!(two, add(ONE, ONE));
}it "can subtract stuff" {
assert_eq!(ZERO, sub(ONE, ONE));
assert_eq!(ONE, sub(two, ONE));
}
}
}
```## License
MIT