Skip to content
Example from first chapter of 'Refactoring' by Martin Fowler, with tests and translations
C# C++ Swift Java Kotlin JavaScript Other
Branch: master
Clone or download
Latest commit 0240bb4 Sep 16, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
cpp Ignore files generated by CLion Aug 13, 2019
csharp add csharp version to the exercice Aug 12, 2019
java Java: remove unused import Sep 14, 2019
javascript initial import Aug 6, 2019
kotlin Use approval testing framework for statement printer test Sep 10, 2019
python improve docs Aug 7, 2019
swift converted kata to swift Sep 12, 2019
.gitignore Added java version of the excersise Aug 8, 2019 fix formatting Aug 7, 2019
license.txt initial import Aug 6, 2019

Theatrical Players Refactoring Kata

The first chapter of 'Refactoring' by Martin Fowler, 2nd Edition contains a worked example of this exercise, in javascript. That chapter is available to download for free. This repo contains the starting point for this exercise in several languages, with tests, so you can try it out for yourself.

What you need to change

Refactoring is usually driven by a need to make changes. In the book, Fowler adds code to print the statement as HTML in addition to the existing plain text version. He also mentions that the theatrical players want to add new kinds of plays to their repertoire, for example history and pastoral.

Automated tests

In his book Fowler mentions that the first step in refactoring is always the same - to ensure you have a solid set of tests for that section of code. However, Fowler did not include the test code for this example in his book. I have used an Approval testing approach and added some tests. I find Approval testing to be a powerful technique for rapidly getting existing code under test and to support refactoring. You should review these tests and make sure you understand what they cover and what kinds of refactoring mistakes they would expect to find.


Thankyou to Martin Fowler for kindly giving permission to use his code.

You can’t perform that action at this time.