Testing Blog

Clean Code Talks - Unit Testing

quarta-feira, novembro 05, 2008
Share on Twitter Share on Facebook
Google
Etiquetas: Misko Hevery

12 comentários :

  1. André Faria Gomes5 de novembro de 2008 às 15:43:00 GMT-8

    Good Job. Thanks!

    ResponderEliminar
    Respostas
      Responder
  2. Steven5 de novembro de 2008 às 19:04:00 GMT-8

    from this s/w test engineer... thanks, this give us plenty to think and talk about this week.

    Are these tech talks auto-downloadable as a video podcast? if not, please pass along my suggestion that they be, they're great.

    ResponderEliminar
    Respostas
      Responder
  3. Dev Dimitrov6 de novembro de 2008 às 06:43:00 GMT-8

    Hi,

    being Test Enginner myslef and having the same problem to persuade and educate developers how to write testable code I find your presentation very nice.
    Is it OK to use your slides?

    ResponderEliminar
    Respostas
      Responder
  4. Misko6 de novembro de 2008 às 07:52:00 GMT-8

    Yes, the slides are posted for the world to use. Nothing would make me happier than influencing someone miles away.

    ResponderEliminar
    Respostas
      Responder
  5. T7 de novembro de 2008 às 13:33:00 GMT-8

    Good points! The tests are and should be easy. The whole point is to make the code testable in much the way you described.
    About those static calls in Java: is it really not possible to use import statements as seams ? In Working effectively with legacy code it's suggested that linking against a fake library (C++) could be used to break such dependencies?

    ResponderEliminar
    Respostas
      Responder
  6. whateverdood10 de novembro de 2008 às 04:52:00 GMT-8

    Nice work! I like the push for unit testing. I encourage you to push for test-driven development as well: having developers write the unit test before any code is written (when possible or practical). This has made my life *so* much simpler.

    The car metaphor didn't work for me. I recommend you use an example that's easier for developers to relate to, like a typical web application stack (headless or with a UI).

    Finally, and for what it's worth, I feel like I've had a lot of success when I develop all my classes as plain old Java Beans: no argument constructors and setters for everything that needs injecting. I avoid constructor args as I find that leads to the "Long Parameter List" code smell.

    Again, nice work and I look forward to more!

    ResponderEliminar
    Respostas
      Responder
  7. Misko11 de novembro de 2008 às 15:15:00 GMT-8

    @whateverdood

    I prefer constructor injection over setter injection since compiler makes it clear to me in which order I need to instantiate things. It also allows me to make objects immutable.

    If your constructor becomes too long, than yes it is code smell. Perhaps your class has too much responsibility? Perhaps you are mixing concerns? Don't blame the constructor, the dependencies are there, constructor just makes them painfully obvious.

    ResponderEliminar
    Respostas
      Responder
  8. Traveller10 de dezembro de 2008 às 13:23:00 GMT-8

    Excellent article!!!

    ResponderEliminar
    Respostas
      Responder
  9. Cue19 de dezembro de 2008 às 01:50:00 GMT-8

    Congrats Misko not only for the excellent subject you touched but for being a great speaker as well.

    I also vote for the video podcast!

    Please make it happen :)

    ResponderEliminar
    Respostas
      Responder
  10. Rohit12 de junho de 2011 às 13:41:00 GMT-7

    Misko,
    Thanks a million for this talk. You mentioned influencing someone miles away. You sure did, influence me right here in India, and almost 3 years after your talk!!. I have learnt so much about better unit testing through your talk.

    ResponderEliminar
    Respostas
      Responder
  11. Greg1 de junho de 2012 às 07:50:00 GMT-7

    How can this be applied to applications where the business logic decides which objects need to be created? For example, let's say I have business rule of the form which states "create a creditor object" when "the customer is delinquent in an amount greater than $100"? The problem is that the knowledge of whether or not to create the creditor object cannot be isolated from the business logic.

    ResponderEliminar
    Respostas
      Responder
  12. Greg1 de junho de 2012 às 07:54:00 GMT-7

    This approach assumes that a static program graph can be created in advance, but what happens when the business logic is required to create the graph? For example, let's say we have a business rule that translates to "create a collections object when the customer is past due in an amount over $100.00"? Often the two are inherently intertwined.

    ResponderEliminar
    Respostas
      Responder
Adicionar comentário
Carregar mais...

The comments you read and contribute here belong only to the person who posted them. We reserve the right to remove off-topic comments.

  

Labels


  • TotT 114
  • GTAC 61
  • James Whittaker 42
  • Misko Hevery 32
  • Code Health 31
  • Anthony Vallone 27
  • Patrick Copeland 23
  • Jobs 18
  • Andrew Trenk 13
  • C++ 11
  • Patrik Höglund 8
  • JavaScript 7
  • Allen Hutchison 6
  • George Pirocanac 6
  • Zhanyong Wan 6
  • Harry Robinson 5
  • Java 5
  • Julian Harty 5
  • Adam Bender 4
  • Alberto Savoia 4
  • Ben Yu 4
  • Erik Kuefler 4
  • Philip Zembrod 4
  • Shyam Seshadri 4
  • Chrome 3
  • Dillon Bly 3
  • John Thomas 3
  • Lesley Katzen 3
  • Marc Kaplan 3
  • Markus Clermont 3
  • Max Kanat-Alexander 3
  • Sonal Shah 3
  • APIs 2
  • Abhishek Arya 2
  • Alan Myrvold 2
  • Alek Icev 2
  • Android 2
  • April Fools 2
  • Chaitali Narla 2
  • Chris Lewis 2
  • Chrome OS 2
  • Diego Salas 2
  • Dori Reuveni 2
  • Jason Arbon 2
  • Jochen Wuttke 2
  • Kostya Serebryany 2
  • Marc Eaddy 2
  • Marko Ivanković 2
  • Mobile 2
  • Oliver Chang 2
  • Simon Stewart 2
  • Stefan Kennedy 2
  • Test Flakiness 2
  • Titus Winters 2
  • Tony Voellm 2
  • WebRTC 2
  • Yiming Sun 2
  • Yvette Nameth 2
  • Zuri Kemp 2
  • Aaron Jacobs 1
  • Adam Porter 1
  • Adam Raider 1
  • Adel Saoud 1
  • Alan Faulkner 1
  • Alex Eagle 1
  • Amy Fu 1
  • Anantha Keesara 1
  • Antoine Picard 1
  • App Engine 1
  • Arham Jain 1
  • Ari Shamash 1
  • Arif Sukoco 1
  • Bartosz Papis 1
  • Benjamin Pick 1
  • Bob Nystrom 1
  • Bruce Leban 1
  • Carlos Arguelles 1
  • Carlos Israel Ortiz García 1
  • Cathal Weakliam 1
  • Chris Kennelly 1
  • Christopher Semturs 1
  • Clay Murphy 1
  • Dagang Wei 1
  • Dan Maksimovich 1
  • Dan Shi 1
  • Dan Willemsen 1
  • Dave Chen 1
  • Dave Gladfelter 1
  • David Bendory 1
  • David Mandelberg 1
  • Derek Snyder 1
  • Diego Cavalcanti 1
  • Dmitry Vyukov 1
  • Eduardo Bravo Ortiz 1
  • Ekaterina Kamenskaya 1
  • Elliott Karpilovsky 1
  • Elliotte Rusty Harold 1
  • Espresso 1
  • Felipe Sodré 1
  • Francois Aube 1
  • Gene Volovich 1
  • Google+ 1
  • Goran Petrovic 1
  • Goranka Bjedov 1
  • Hank Duan 1
  • Havard Rast Blok 1
  • Hongfei Ding 1
  • Jason Elbaum 1
  • Jason Huggins 1
  • Jay Han 1
  • Jeff Hoy 1
  • Jeff Listfield 1
  • Jessica Tomechak 1
  • Jim Reardon 1
  • Joe Allan Muharsky 1
  • Joel Hynoski 1
  • John Micco 1
  • John Penix 1
  • Jonathan Rockway 1
  • Jonathan Velasquez 1
  • Josh Armour 1
  • Julie Ralph 1
  • Kai Kent 1
  • Kanu Tewary 1
  • Karin Lundberg 1
  • Kaue Silveira 1
  • Kevin Bourrillion 1
  • Kevin Graney 1
  • Kirkland 1
  • Kurt Alfred Kluever 1
  • Kyle Freeman 1
  • Manjusha Parvathaneni 1
  • Marek Kiszkis 1
  • Marius Latinis 1
  • Mark Ivey 1
  • Mark Manley 1
  • Mark Striebeck 1
  • Matt Lowrie 1
  • Meredith Whittaker 1
  • Michael Bachman 1
  • Michael Klepikov 1
  • Mike Aizatsky 1
  • Mike Wacker 1
  • Mona El Mahdy 1
  • Nimit Khandelwal 1
  • Noel Yap 1
  • Palak Bansal 1
  • Patricia Legaspi 1
  • Per Jacobsson 1
  • Peter Arrenbrecht 1
  • Peter Spragins 1
  • Phil Norman 1
  • Phil Rollet 1
  • Pooja Gupta 1
  • Project Showcase 1
  • Radion Khait 1
  • Radoslav Vasilev 1
  • Rahul Singal 1
  • Rajat Dewan 1
  • Rajat Jain 1
  • Rich Martin 1
  • Richard Bustamante 1
  • Roman Govsheev 1
  • Roshan Sembacuttiaratchy 1
  • Ruslan Khamitov 1
  • Saicharan Nimmala 1
  • Sam Lee 1
  • Sean Jordan 1
  • Sebastian Dörner 1
  • Shahar Roth 1
  • Sharon Zhou 1
  • Shiva Garg 1
  • Siddartha Janga 1
  • Simran Basi 1
  • Stan Chan 1
  • Stephen Ng 1
  • Tejas Shah 1
  • Test Analytics 1
  • Test Engineer 1
  • Tim Lyakhovetskiy 1
  • Tom O'Neill 1
  • Vojta Jína 1
  • Zhe Lu 1
  • automation 1
  • dead code 1
  • iOS 1
  • mutation testing 1


Archive


  • ►  2026 (8)
    • ►  out. (1)
    • ►  jul. (1)
    • ►  jun. (1)
    • ►  mai. (2)
    • ►  abr. (1)
    • ►  mar. (2)
  • ►  2025 (3)
    • ►  out. (1)
    • ►  set. (1)
    • ►  jan. (1)
  • ►  2024 (13)
    • ►  dez. (1)
    • ►  out. (1)
    • ►  set. (1)
    • ►  ago. (1)
    • ►  jul. (1)
    • ►  mai. (3)
    • ►  abr. (3)
    • ►  mar. (1)
    • ►  fev. (1)
  • ►  2023 (14)
    • ►  dez. (2)
    • ►  nov. (2)
    • ►  out. (5)
    • ►  set. (3)
    • ►  ago. (1)
    • ►  abr. (1)
  • ►  2022 (2)
    • ►  fev. (2)
  • ►  2021 (3)
    • ►  jun. (1)
    • ►  abr. (1)
    • ►  mar. (1)
  • ►  2020 (8)
    • ►  dez. (2)
    • ►  nov. (1)
    • ►  out. (1)
    • ►  ago. (2)
    • ►  jul. (1)
    • ►  mai. (1)
  • ►  2019 (4)
    • ►  dez. (1)
    • ►  nov. (1)
    • ►  jul. (1)
    • ►  jan. (1)
  • ►  2018 (7)
    • ►  nov. (1)
    • ►  set. (1)
    • ►  jul. (1)
    • ►  jun. (2)
    • ►  mai. (1)
    • ►  fev. (1)
  • ►  2017 (17)
    • ►  dez. (1)
    • ►  nov. (1)
    • ►  out. (1)
    • ►  set. (1)
    • ►  ago. (1)
    • ►  jul. (2)
    • ►  jun. (2)
    • ►  mai. (3)
    • ►  abr. (2)
    • ►  fev. (1)
    • ►  jan. (2)
  • ►  2016 (15)
    • ►  dez. (1)
    • ►  nov. (2)
    • ►  out. (1)
    • ►  set. (2)
    • ►  ago. (1)
    • ►  jun. (2)
    • ►  mai. (3)
    • ►  abr. (1)
    • ►  mar. (1)
    • ►  fev. (1)
  • ►  2015 (14)
    • ►  dez. (1)
    • ►  nov. (1)
    • ►  out. (2)
    • ►  ago. (1)
    • ►  jun. (1)
    • ►  mai. (2)
    • ►  abr. (2)
    • ►  mar. (1)
    • ►  fev. (1)
    • ►  jan. (2)
  • ►  2014 (24)
    • ►  dez. (2)
    • ►  nov. (1)
    • ►  out. (2)
    • ►  set. (2)
    • ►  ago. (2)
    • ►  jul. (3)
    • ►  jun. (3)
    • ►  mai. (2)
    • ►  abr. (2)
    • ►  mar. (2)
    • ►  fev. (1)
    • ►  jan. (2)
  • ►  2013 (16)
    • ►  dez. (1)
    • ►  nov. (1)
    • ►  out. (1)
    • ►  ago. (2)
    • ►  jul. (1)
    • ►  jun. (2)
    • ►  mai. (2)
    • ►  abr. (2)
    • ►  mar. (2)
    • ►  jan. (2)
  • ►  2012 (11)
    • ►  dez. (1)
    • ►  nov. (2)
    • ►  out. (3)
    • ►  set. (1)
    • ►  ago. (4)
  • ►  2011 (39)
    • ►  nov. (2)
    • ►  out. (5)
    • ►  set. (2)
    • ►  ago. (4)
    • ►  jul. (2)
    • ►  jun. (5)
    • ►  mai. (4)
    • ►  abr. (3)
    • ►  mar. (4)
    • ►  fev. (5)
    • ►  jan. (3)
  • ►  2010 (37)
    • ►  dez. (3)
    • ►  nov. (3)
    • ►  out. (4)
    • ►  set. (8)
    • ►  ago. (3)
    • ►  jul. (3)
    • ►  jun. (2)
    • ►  mai. (2)
    • ►  abr. (3)
    • ►  mar. (3)
    • ►  fev. (2)
    • ►  jan. (1)
  • ►  2009 (54)
    • ►  dez. (3)
    • ►  nov. (2)
    • ►  out. (3)
    • ►  set. (5)
    • ►  ago. (4)
    • ►  jul. (15)
    • ►  jun. (8)
    • ►  mai. (3)
    • ►  abr. (2)
    • ►  fev. (5)
    • ►  jan. (4)
  • ▼  2008 (75)
    • ►  dez. (6)
    • ▼  nov. (8)
      • Guide to Writing Testable Code
      • Online Machine Learning Testing == Extreme Testing
      • Clean Code Talks - Global State and Singletons
      • My Unified Theory of Bugs
      • TotT: Finding Data Races in C++
      • Clean Code Talks - Dependency Injection
      • Clean Code Talks - Unit Testing
      • Partial Automation: Keeping humans in the loop
    • ►  out. (9)
    • ►  set. (8)
    • ►  ago. (9)
    • ►  jul. (9)
    • ►  jun. (6)
    • ►  mai. (6)
    • ►  abr. (4)
    • ►  mar. (4)
    • ►  fev. (4)
    • ►  jan. (2)
  • ►  2007 (41)
    • ►  out. (6)
    • ►  set. (5)
    • ►  ago. (3)
    • ►  jul. (2)
    • ►  jun. (2)
    • ►  mai. (2)
    • ►  abr. (7)
    • ►  mar. (5)
    • ►  fev. (5)
    • ►  jan. (4)

Feed

  • Google
  • Privacy
  • Terms