retro testing (devcontlv jan 2014)

Post on 02-Jul-2015

125 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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)

TRANSCRIPT

1Allon Mureinik - Retro Testing

Retro Testing

Allon MureinikTeam Lead, Cloud Storage, Red Hatamureini@redhat.com / @mureinik

January 2014

2Allon Mureinik - Retro Testing

TDD Is Easy...

3Allon Mureinik - Retro Testing

... 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...

4Allon Mureinik - Retro Testing

Will the mistakes of the past haunt me forever?

5Allon Mureinik - Retro Testing

It’s not an all-or-nothing situation

6Allon Mureinik - Retro Testing

One baby step at a time

7Allon Mureinik - Retro Testing

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

8Allon Mureinik - Retro Testing

Refacroting with no tests is like...

9Allon Mureinik - Retro Testing

Example : Bad Code

10Allon Mureinik - Retro Testing

Some minimal refactoring

11Allon Mureinik - Retro Testing

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

12Allon Mureinik - Retro Testing

I @Spy With My Little Eye

13Allon Mureinik - Retro Testing

Some more refactoring

14Allon Mureinik - Retro Testing

Let’s modernize our code

15Allon Mureinik - Retro Testing

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

16Allon Mureinik - Retro Testing

17Allon Mureinik - Retro Testing

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

18Allon Mureinik - Retro Testing

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...

19Allon Mureinik - Retro Testing

Have the courage to stand up to excuses

20Allon Mureinik - Retro Testing

Questions?

top related