The Test Anything Protocol (TAP) is a text-based protocol for test results:
1..4
ok 1 - Input file opened
not ok 2 - First line of the input valid
ok 3 - Read the rest of the file
not ok 4 - Summarized correctly # TODO Not written yet
I think the idea is an good one, a simple cross-platform human readable standard for formatting test results. There are TAP producers and consumers for Perl, Java, JavaScript etc. allowing you to join up tests for cross-platform projects.
NUnit runner
Over the last week or so I’ve created a TAP runner F# script for NUnit test methods. It supports the majority of NUnit’s attributes including ExpectedException, TimeOut and test generation with TestCase, TestCaseSource, Values, etc., .
The runner can be used in a console app to produce TAP output to the console or directly in F# interactive for running tests embedded in a script.
TAP run
Tests can be organized in classes:
type TAPExample () =
[<Test>] member __.``input file opened`` () = Assert.Pass()
[<Test>] member __.``First line of the input valid`` () = Assert.Fail()
[<Test>] member __.``Read the rest of the file`` () = Assert.Pass()
[<Test>] member __.``Summarized correctly`` () = Assert.Fail()
Tap.Run typeof<TAPExample>
or in modules:
let [<Test>] ``input file opened`` () = Assert.Pass()
let [<Test>] ``First line of the input valid`` () = Assert.Fail()
let [<Test>] ``Read the rest of the file`` () = Assert.Pass()
let [<Test>] ``Summarized correctly`` () = Assert.Fail()
type Marker = interface end
Tap.Run typeof<Marker>.DeclaringType
Note: the marker interface is used to reflect the module’s type.
Console output
In the console test cases are marked in red or green:

Debugging
If you create an F# Tutorial project you get both, an F# script file that runs as a console application allowing you to set breakpoints in your script with the Visual Studio debugger.

Prototyping
When I’m prototyping a new feature I typically use the F# interactive environment for quick feedback and to do exploratory testing. The TAP runner lets you create and run NUnit formatted tests directly in the script file before later promoting to a full fat project for use in a continuous build environment.
F# Scripting
Interested in learning more about F# scripting, pop along to the Phil Nash’s talk at the F#unctional Londoners tonight.