austinsheep/demonstrate

Declarative Testing Framework

===========================

Demonstrate allows tests to be written without as a much repetitive code within the demonstrate! macro, which will generate the corresponding full tests.

This testing library is highly influenced by speculate.rs and ruspec which both take inspiration from RSpec.

The following new block definitions are utilized by Demonstrate:

  • before/after — A block of source code that will be included at the start or end of each test respectively in the current and nested describe/context blocks.

  • describe/contextdescribe and context are aliases for eachother. Specifies a new scope of tests which can contain a before and/or after block, nested describe/context blocks, and it/test blocks. These translate to Rust mod blocks, but also allow for shared test properties to be defined such as tests having outer attributes, being async, and having Return<()> types.

  • it/testit and test are aliases for eachother. Represents one test that translate to a Rust unit test.


Example

use demonstrate::demonstrate;

fn is_4() -> u8 {
    4
}

demonstrate! {
    describe "module" {
        use super::*;

        before {
            let four = 4;
        }

        #[should_panic]
        it "can fail" {
            assert!(four != 4)
        }

        test "is returnable" -> Result<(), &'static str> {
            if is_4() == four {
                Ok(())
            } else {
                Err("It isn't 4! :o")
            }
        }

        #[async_attributes::test]
        async context "asynchronous" {
            before {
                let is_4_task = async_std::task::spawn(async {
                    is_4()
                });
            }

            it "awaits" {
                assert_eq!(four, is_4_task.await)
            }
        }
    }
}

License

Licensed under MIT license.
Issues

Collection of the latest Issues

64kramsystem

64kramsystem

Comment Icon5

In some cases, it's required to share a single instance between tests.

AFAIK, the current macro before is run before each test, so it doesn't work for the cases above.

There is a workaround, which is very ugly though - using lazy_static with phony implementations of Send and Sync, which is... 🤯

My request is therefore to implement the (typical) "before_all" logic, which is executed only once (per context/describe).

Information - Updated Feb 09, 2022

Stars: 38
Forks: 5
Issues: 2

utest standard testing for Rust

Make sure your not using this for testing no_std code as it relies on the unstable branch

utest standard testing for Rust

K9 - Rust Testing Library

Snapshot testing + better assertions

K9 - Rust Testing Library

A contract testing tool built in Rust using the filmReel format

0 or greater for making gRPC requests

A contract testing tool built in Rust using the filmReel format

A contract testing tool built in Rust using the filmReel format

0 or greater for making gRPC requests

A contract testing tool built in Rust using the filmReel format

Testing to include rm2fb into libremarkable for musl builds

This repo may get removed if not of use for resolving

Testing to include rm2fb into libremarkable for musl builds

just testing rust

cli + advanced cli features

just testing rust

Testing different ways of reading files in rust

All the code here is experimental

Testing different ways of reading files in rust

testing commit name

A template for kick starting a Rust and WebAssembly project using Tutorial

testing commit name

Testing Rust Code

This repo contains examples of many common features and approaches for testing here

Testing Rust Code

Declarative Testing Framework

===========================

Declarative Testing Framework
Facebook Instagram Twitter GitHub Dribbble
Privacy