Testing Blog

How to Write 3v1L, Untestable Code

Thursday, July 24, 2008
Share on Google+ Share on Twitter Share on Facebook
Google
Labels: Misko Hevery

4 comments :

  1. redsoloJuly 26, 2008 at 2:45 PM

    @misko

    Will the Testability explorer catch these lovely tips and tricks?

    ReplyDelete
    Replies
      Reply
  2. EastSydneyJuly 27, 2008 at 7:16 AM

    Yeah, the sarcasm was "great".

    ReplyDelete
    Replies
      Reply
  3. apexrallyJuly 29, 2008 at 7:42 AM

    "Code smell? No way - code perfume!"
    Awesome! That one made me laugh. Tre bien.
    -Kristian

    ReplyDelete
    Replies
      Reply
  4. SteveAugust 24, 2008 at 2:23 PM

    On the whole great advice.

    small beefs:

    "Favor polymorphism over conditionals" - good advice if you never think through the OO alternatives. I've seen (and have at times myself written) a lot of code that bends over backwards to avoid the odd if-else or small switch in the name of "OO". Sometimes the if-else is just clearer and more honest.

    "Create Managers and Controllers" - Good basic advice that can be taken too far. There are some places - "controllers" are great examples - that are a lot more like transaction scripts - a small number of lines of arbitrary statements - and just don't make sense to cover over with more abstraction - even a Command is often a waste of time. Gotta dispatch somewhere, just make it as clear as possible, whatever that means to your team.

    Many of these are good ideas whether you're writing tests or not. The last real entrenched "best practice" still out there (even in more agile environments) that TDD'ers have to contend with is defensive coding. I wish the Pragmatic Programmers would come out and disown (in a post-come-to-Jesus/TDD kind of way) that advice - it's the only fault in that book.

    ReplyDelete
    Replies
      Reply
Add comment
Load more...

  

Labels


  • Aaron Jacobs 1
  • Adam Porter 1
  • Alan Faulkner 1
  • Alan Myrvold 1
  • Alberto Savoia 4
  • Alek Icev 2
  • Alex Eagle 1
  • Allen Hutchison 6
  • Andrew Trenk 8
  • Android 1
  • Anthony Vallone 25
  • Antoine Picard 1
  • APIs 2
  • App Engine 1
  • April Fools 2
  • Arif Sukoco 1
  • Bruce Leban 1
  • C++ 11
  • Chaitali Narla 2
  • Christopher Semturs 1
  • Chrome 3
  • Chrome OS 2
  • Dave Chen 1
  • Diego Salas 2
  • Dmitry Vyukov 1
  • Dori Reuveni 1
  • Eduardo Bravo Ortiz 1
  • Ekaterina Kamenskaya 1
  • Erik Kuefler 3
  • Espresso 1
  • George Pirocanac 2
  • Google+ 1
  • Goranka Bjedov 1
  • GTAC 54
  • Hank Duan 1
  • Harry Robinson 5
  • Havard Rast Blok 1
  • Hongfei Ding 1
  • James Whittaker 42
  • Jason Arbon 2
  • Jason Elbaum 1
  • Jason Huggins 1
  • Java 5
  • JavaScript 7
  • Jay Han 1
  • Jessica Tomechak 1
  • Jim Reardon 1
  • Jobs 14
  • Joe Allan Muharsky 1
  • Joel Hynoski 1
  • John Penix 1
  • John Thomas 3
  • Jonathan Rockway 1
  • Jonathan Velasquez 1
  • Julian Harty 5
  • Julie Ralph 1
  • Karin Lundberg 1
  • Kaue Silveira 1
  • Kevin Graney 1
  • Kirkland 1
  • Kurt Alfred Kluever 1
  • Lesley Katzen 1
  • Marc Kaplan 3
  • Mark Ivey 1
  • Mark Striebeck 1
  • Marko Ivanković 1
  • Markus Clermont 3
  • Michael Bachman 1
  • Michael Klepikov 1
  • Mike Wacker 1
  • Misko Hevery 32
  • Mobile 2
  • Mona El Mahdy 1
  • Noel Yap 1
  • Patricia Legaspi 1
  • Patrick Copeland 23
  • Patrik Höglund 5
  • Peter Arrenbrecht 1
  • Phil Rollet 1
  • Philip Zembrod 4
  • Pooja Gupta 1
  • Radoslav Vasilev 1
  • Rajat Dewan 1
  • Rajat Jain 1
  • Rich Martin 1
  • Richard Bustamante 1
  • Roshan Sembacuttiaratchy 1
  • Ruslan Khamitov 1
  • Sean Jordan 1
  • Sharon Zhou 1
  • Shyam Seshadri 4
  • Simon Stewart 2
  • Stephen Ng 1
  • Tejas Shah 1
  • Test Analytics 1
  • Tony Voellm 2
  • TotT 54
  • Vojta Jína 1
  • WebRTC 2
  • Yvette Nameth 2
  • Zhanyong Wan 6
  • Zuri Kemp 2


Archive


  •     2015
    •     December
    •     November
    •     October
    •     August
    •     June
    •     May
    •     April
    •     March
    •     February
    •     January
  •     2014
    •     December
    •     November
    •     October
    •     September
    •     August
    •     July
    •     June
    •     May
    •     April
    •     March
    •     February
    •     January
  •     2013
    •     December
    •     November
    •     October
    •     August
    •     July
    •     June
    •     May
    •     April
    •     March
    •     January
  •     2012
    •     December
    •     November
    •     October
    •     September
    •     August
  •     2011
    •     November
    •     October
    •     September
    •     August
    •     July
    •     June
    •     May
    •     April
    •     March
    •     February
    •     January
  •     2010
    •     December
    •     November
    •     October
    •     September
    •     August
    •     July
    •     June
    •     May
    •     April
    •     March
    •     February
    •     January
  •     2009
    •     December
    •     November
    •     October
    •     September
    •     August
    •     July
    •     June
    •     May
    •     April
    •     February
    •     January
  •     2008
    •     December
    •     November
    •     October
    •     September
    •     August
    •     July
      • Circular Dependency in constructors and Dependency...
      • TotT: Testing Against Interfaces
      • How to Write 3v1L, Untestable Code
      • Breaking the Law of Demeter is Like Looking for a ...
      • YUI and GWT... How do you test?
      • Call for Attendance: GTAC 2008
      • How to Think About the "new" Operator with Respect...
      • TotT: EXPECT vs. ASSERT
      • Announcing: New Google C++ Testing Framework
    •     June
    •     May
    •     April
    •     March
    •     February
    •     January
  •     2007
    •     October
    •     September
    •     August
    •     July
    •     June
    •     May
    •     April
    •     March
    •     February
    •     January

Feed

Company-wide

  • Official Google Blog
  • Public Policy Blog
  • Student Blog

Products

  • Google for Work Blog
  • Chrome Blog
  • Official Android Blog

Developers

  • Ads Developer Blog
  • Android Developers Blog
  • Developers Blog
  • Google
  • Privacy
  • Terms