Your SlideShare is downloading. ×
Testability
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Testability

434
views

Published on

Jonathan's Pecha Kucha

Jonathan's Pecha Kucha

Published in: Business

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
434
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Testable Code – Mind Shi2s
  • 2. Testable Code – Mind Shi2s
  • 3. Flaw: Constructor does Real Work
  • 4. Flaw: Constructor does Real Work • It violates the Single Responsibility Principle • Tes7ng Directly is Difficult • Subclassing and Overriding to Test is S7ll  Flawed • It Forces Collaborators on You
  • 5. Warning Signs
  • 6. Warning Signs • new keyword in a constructor or at field  declara<on  • Sta<c method calls in a constructor or at field  declara<on  • Anything more than field assignment in  constructors • Adding or using an ini<aliza<on block
  • 7. Warning Signs
  • 8. Warning Signs • Object not fully ini<alized a2er the constructor  finishes (watch out for ini<alize methods) • Control flow (condi<onal or looping logic) in a  constructor • CL does complex object graph construc<on  inside a constructor rather than using a factory  or builder 
  • 9. Solu<on  Do not create collaborators in your constructor,  but pass them in. (Don’t look for things! Ask  for things!)
  • 10. Flaw: Digging into Collaborators getUserManager().getUser(123).getProfile()     .isAdmin()    // this is egregiously bad (all you need to know if  the user is an admin) context.getCommonDataStore().find(1234)   // this is bad
  • 11. Warning Signs
  • 12. Warning Signs • Objects are passed in but never used directly  (only used to get access to other objects) • Law of Demeter viola<on: method call chain  walks an object graph with more than one dot (.) • Suspicious names: context, environment,  principal, container, or manager
  • 13. Flaw: Bri9le Global State & Singletons
  • 14. Flaw: Bri9le Global State & Singletons • Spooky Ac<on at a Distance
  • 15. Warning Signs
  • 16. Warning Signs • Adding or using singletons  • Adding or using sta<c fields or sta<c methods  • Adding or using sta<c ini<aliza<on blocks  • Adding or using registries  • Adding or using service locators
  • 17. Flaw: Class Does Too Much
  • 18. Flaw: Class Does Too Much a.k.a. … • Kitchen Sink  • Dumping Ground  • Class who’s Behavior has too many “AND’s”  • First thing’s KIll All The Managers (*See  Shakespeare)  • God Class  • “You can look at anything except for this one  class”
  • 19. Warning Signs
  • 20. Warning Signs • Summing up what the class does includes the  word “and”  • Class would be challenging for new team  members to read and quickly “get it”  • Class has fields that are only used in some  methods  • Class has sta<c methods that only operate on  parameters
  • 21. It Read