innmind/black-box

Test library

Maintainers

👁 Baptouuuu

Package info

github.com/Innmind/BlackBox

Homepage

Issues

pkg:composer/innmind/black-box

Statistics

Installs: 193 424

Dependents: 82

Suggesters: 9

Stars: 44

7.0.0 2026-05-14 12:50 UTC

Requires

Suggests

None

Provides

None

Conflicts

Replaces

None

MIT 7f5c7b66056404d1b410b842e86eb5eab9c1d221

  • Baptiste Langlade <baptiste.langlade.woop@hey.com>

fixturestestproperty based testing


README

👁 CI
👁 codecov
👁 Type Coverage

BlackBox is a Property Based Testing framework and test runner.

Property Based Testing is a way to verify a piece of code always behave the same way (aka a Property) by testing it with multiple values of a given type.

The common introduction to this approach is the add function that has 3 properties:

  • it is commutative
  • it is associative
  • it is an identity function

To prove this via BlackBox you can do it this way:

use Innmind\BlackBox\{
 Application,
 Set,
 Runner\Assert,
 Prove,
};

Application::new([])
 ->tryToProve(static function(Prove $prove) {
 yield $prove
 ->proof('add is commutative')
 ->given(
 Set::integers(),
 Set::integers(),
 )
 ->test(static fn(Assert $assert, int $a, int $b) => $assert->same(
 add($a, $b),
 add($b, $a),
 ));

 yield $prove
 ->proof('add is associative')
 ->given(
 Set::integers(),
 Set::integers(),
 Set::integers(),
 )
 ->test(static fn(Assert $assert, int $a, int $b, int $c) => $assert->same(
 add(add($a, $b), $c),
 add($a, add($b, $c)),
 ));

 yield $prove
 ->proof('add is an identity function')
 ->given(Set::integers())
 ->test(static fn(Assert $assert, int $a) => $assert->same(
 $a,
 add($a, 0),
 ));
 })
 ->exit();

By default BlackBox will generate 100 scenarii for each proof.

👁 Image

Note

BlackBox use the term proof to emphasize that you are testing behaviours not specific scenarii, but these are NOT formal proofs

Installation

composer require --dev innmind/black-box

Documentation

Full documentation can be found in the here.