Unit testing is easy... In a perfect world.
Our world is not.
This talk will cover a bunch of tips, tricks, and techniques to retrofit ugly legacy applications so parts of them can be unit tested.
(Examples given in Java using JUnit and Mockito)
3. ... or is it?
●
The first two part should be
●
Write a test
●
Make sure it fails
●
The question is why it fails.
●
In a legacy system, it will often fail for “bad” reasons:
●
Unable to access the database
●
Some static resource not set up
●
Need to spin up an application server
●
Etc., etc., etc...
Allon Mureinik - Retro Testing
3
4. Will the mistakes of the past haunt me
forever?
Allon Mureinik - Retro Testing
4
5. It’s not an all-or-nothing situation
Allon Mureinik - Retro Testing
5
6. One baby step at a time
Allon Mureinik - Retro Testing
6
7. Refactor, refactor, refactor
●
●
Your first task would probably be to do some
refactoring
Resist the urge to improve the code
●
●
Frankly, this step may make the code look worse
Your only goal here is to create an opportunity to write
tests
Allon Mureinik - Retro Testing
7
11. Now we can start writing tests...
●
●
Now we have the tools to separate external resources
from logic
There are a couple of ways to do so:
●
Override the relevant methods in your test
●
Use Mockito/EasyMock to spy the tested object
●
Use @Rules to set up common mocking once
Allon Mureinik - Retro Testing
11
12. I @Spy With My Little Eye
Allon Mureinik - Retro Testing
12
15. But how can I write asserts?
●
Overriding, mocking and all that jazz are fine and well
●
But any test boils down to writing an assert...
●
... and I have no idea what this function is supposed to
do
●
Remember this is a legacy system
●
You may not need to test it for correctness ...
●
Just for backwards compatibility
Allon Mureinik - Retro Testing
15
17. The real challenge is changing mindset
●
We can discusses refactoring till we’re blue in the face
●
But the real challenge isn’t changing the way we code
●
It’s changing the way we approach the problem
Allon Mureinik - Retro Testing
17
18. It’s all too easy to slip back to bad habits
●
This bug is blocking the release...
●
It’s a ton of work to refactor this logic out...
●
The rest of the code is bad anyway...
Allon Mureinik - Retro Testing
18
19. Have the courage to stand up to excuses
Allon Mureinik - Retro Testing
19