The framework was written a number of years ago (before most of the current ones out there). An (basic) example of its use:
Code:
public class CalculatorSpec : SpecFor<BasicCalculator>
{
[Test]
public void WhenAdding()
{
// subject is created by the base [SetUp].
specify(() => subject.Add(1, 2) == 3); // example 1
specify(() => Assert.That(subject.Add(-1, -1), Is.EqualTo(-2))); // example 2
specify(() => subject is IArithmeticEngine); // example 3
}
}
The framework will queue all of the expressions in the specify blocks during execution of the test, and invoke them upon teardown. This gives us all spec failures for a single test, rather than traditional frameworks which will stop after the first assertion. Additionally specify() has two overloads:
1. specify(Action) which takes in the expression and expects the expression to Assert
2. specify(Func<bool>) which allows us to write literal expressions to better express intent (examples 1&3) rather than *needing* assertion frameworks (example 2).
We could look at moving to another framework, but our project is reasonably large (4000+ tests) so it's not our first choice :)