October 3, 2017

...Learn TDD with Codemanship

Manual Refactoring : Introduce Field

Next in my series on manual refactoring is a variation on Introduce Local Variable, where we want the result of an expression to be shared among methods: Introduce Field.

Consider an example where we have an object creation expression repeated in 3 unit tests.

I want to refactor this code so that the knowledge of object creation is in just one place, and because all 3 tests need to access the result, it'll need to be a field.

Like when I introduced a local variable, I'll start by cutting the whole expression and replacing it with a reference to the field-to-be.

Then I can declare the field and paste the creation expression as its initial value.


Next, I replace the other 2 duplicated expressions with a reference to the new field.


Of course, there's some wiggle room here. I could also have initialised the field in a constructor.

Or I could have initialised it using a set-up method.

But I went for the simplest solution, which works fine in this situation because:

a. Fibonacci is stateless, and its set-up is simple, and...

b. JUnit instantiates the fixture for every test anyway

Posted 3 years, 2 months ago on October 3, 2017