Today I taught my very first class, which was the first in a series of training sessions I plan on presenting at my workplace on fitnesse. Fitnesse (and acceptance testing) is a very interesting topic to discuss on my team, as unfortunately the team was mandated to use it without being given any genuine, formal training on the subject.

The result has been much much grief. This week I and a few others were tasked with fixing broken acceptance tests, which tested the right thing, but were very fragile. For example, due to the lack of knowledge of symbols or fixtures for flow processes like DoFixture or ActionFixture, alot of the tests contain ad hoc ColumnFixtures that use static members to communicate with each other, and 7 levels of heiarchies between fixtures to reuse logic, despite how unrelated. This has led to problems as the tests themselves are fragile and don’t work well when ran together in suites (thanks to shared static members).


Anyhow, my plan has been to teach the knowledge I have learned about fitnesse over the next several weeks. Today I just covered the basics, as the class consisted of both people who have used it and people who have not even seen it. Basically I just went over the philosophy behind acceptance testing, the difference between FIT and Fitnesse, and the basics of how to use the wiki markup, how pages are structured, make tables, and common gotchas like naming a page MyPAge and MyPage (the first not creating a new page) or how spaces at the end or beginning of table rows that cause them not to get parsed, a common problem.

The experience was quite good. I was able to keep pace and finish ahead of time despite the perception that I wouldn’t because I would answer questions a lot. I even was able to move around a bit during exercises to help people out! :)

One thing I noticed though is how you have to really, really raise your voice when you move from interactive examples to the rest of the presentations. During examples the “students” will tend to discuss and talk amongst themselves, and using my normal voice a lot of people didn’t realize I was speaking. That’s the big learning experience I got out of it, knowing when you need to raise your voice and how to keep the pace going without leaving people behind.

I also stumbled a bit through some of the slides, and at times wandered a little too far off of what I had put down on the slides. :(

I am really excited and look forward to the future sessions. Next week I am going to get them started with the basic fixtures (ColumnFixture, RowFixture, and ActionFixture), and from there move on to FitLibrary, how to use symbols, variables, include pages, create setUp and tearDown pages for suites, and even a course on creating custom fixtures with TableFixture. I am also hoping to touch on topics such as having the customer write the fitnesse tests, with the coder writing the fixtures, and try to drive home the point that fixtures should be a thin layer above your application, merely providing inputs and collecting outputs from the business processes.

I am really hoping this will help my team (and those attending outside the team) move forward with “proper” acceptance testing and make us excellent at automating all tests. Because once we get there, the problem with tangled dependencies, tests that feel like tangled fishing lines, and general confusion will be a thing of the past. ;)

I’ll admit I do have a slightly selfish goal from it as well. I want to present on topics I feel I am knowledgable of. I am really hoping that I can give a presentation on RMock and the idea of a balance between State Based and Interaction Based testing at the next code camp in St.Louis, and want to be able to be an effective presenter that leaves attendees leaving feeling they have left knowing more than they did when they walked in.

It’s an interesting experience.

If you're new here, you may want to subscribe to my RSS feed. Thanks for visiting!