What is this "Given()/When()/Then()" stuff?

The way my unit testing library, UnitTest11, handles tests. Instead of using the SetUp/Test/TearDown of the xUnit family of libraries it uses Given/When/Then/Finally. It more closely matches the way people often write unit tests: Arrange/Act/Assert/TearDown. The functions take a describing string and lambdas, which are the actual test logic.

When a fixture is ran, it builds up from the given/when/thens such that if you do

Given X

When U

Then A

Then B

When T

Then C

Finally O

Then the fixture will actually run as:

Given X When U Then A Finally O

Given X When U Then B Finally O

Given X When T Then C Finally O