Framework for Integrated Testing (FIT) is an acceptance testing framework originally developed for Java by Ward Cunningham. One of the central ideas of FIT was to promote collaboration and allow customers and business analysts to write and verify tests.
FIT makes it easy to run tests, but does not provide a way to create them. The original idea was to write tests in Word, Excel, or any tool that can output HTML. FitNesse is a web wiki front-end to FIT developed by Robert Martin and Micah Martin from ObjectMentor. Today, it is the most popular choice for running FIT tests. It provides an integrated environment in which we can write and execute tests and speeds up the job with quite a few useful shortcuts.
Although FitNesse was also written in Java, it was not heavily integrated with FIT, but executed it as an external program. This turned out to be a very good idea, as it was possible to plug in different test runners. After the FIT/FitNesse combination became popular in the Java world, test runners were written for other environments including C++, Python and .NET. The .NET integration was developed by David Chelimsky and Mike Stockdale; version 1.0 was released in late 2006. Judging from its success in the Java world, FitNesse will soon become one of the most popular tools for .NET test-driven development.
Writing FIT tests does not require any special programming knowledge or technical proficiency. Modellers who could not use JUnit if their life depended on it can write tests with FitNesse without any problems. A typical FitNesse test is shown in Figure 1.1: test inputs and expected results are specified in a table, with expected outcomes having a question mark in the column. The tables can be written in Excel, Word or any HTML editor. FitNesse even provides a special wiki syntax to build tables more efficiently than in plain HTML. This tabular form makes it very easy to write tests and view results.
FIT tables connect to the domain code using a very thin fixture code layer, which is effectively more an integration API then a testing API. FIT requires very little extra code for testing, but just enough to provide a sanity check for the underlying interfaces. Often, FIT fixtures constitute the first client of our code.
FitNesse is a web-based server, allowing easy collaboration. Business analysts and other non–technical people do not have to set up any software in order to use FitNesse. Any browser will do just fine. Additional documentation, project notes, diagrams and explanations can be easily bundled with tests in FitNesse, providing deeper insight into the problem domain and helping people understand and verify test results. All this helps to evolve tests along with the code.
FIT and FitNesse are much better than unit testing tools for getting non–technical people involved with the testing process, especially in defining and verifying acceptance criteria. They allow developers to turn requirements and email conversations into tests almost instantly. Business analysts and managers can read the tests, verify results and track progress.
Testing rules are decoupled from the code, so tests can easily evolve along with the business rules. This also allows us to write tests before any code, even before the interfaces, without breaking the build. FitNesse tests are also a good way to pass requirements to external developers and teams; they act as a technical specification of what needs to be done.




