Testing Blog

Testing on the Toilet: Don't Put Logic in Tests

giovedì, luglio 31, 2014
Share on Twitter Share on Facebook
Google
Etichette: Erik Kuefler , TotT

14 commenti :

  1. Unknown31 luglio 2014 alle ore 17:31:00 GMT-7

    Although I agree with you alot, this example introduces some problems dealing with multiple enviroments.

    What if I want to move my site to a new domain. Do I need to change all my tests? What about dev-enviroment, test-enviroment and production-enviroment?

    Defining the base url at the top of the file, or even better, in a config file, would make my life alot easier.

    RispondiElimina
    Risposte
    1. Tim Gifford1 agosto 2014 alle ore 11:20:00 GMT-7

      This is a unit test, not a functional test. The logic doesn't change based on the parameters. This code would work in all these environments w/o actually testing it in each environment. Your argument would suggest that to fully test this method you would test it against every domain.

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  2. Aditya Kalra (Ady)31 luglio 2014 alle ore 17:55:00 GMT-7

    I like the way article is explained. Simple and crisp!

    RispondiElimina
    Risposte
      Rispondi
  3. Sujan31 luglio 2014 alle ore 21:49:00 GMT-7

    Interesting article!

    RispondiElimina
    Risposte
      Rispondi
  4. Kris Bezawada31 luglio 2014 alle ore 22:13:00 GMT-7

    I agree with the concept of not putting a lot of logic in the test but not quite with the example. This makes the test limited to just one instance of the App

    JumpToUrl(ConstantsConfig.hhtp_protocol + BeanTestHelper.App + "csr." + ConstantsConfig.homepage_url );

    protocol - http/https
    App- dev,test,stage,prod
    homepage - google.ca , google.sg , google.com

    RispondiElimina
    Risposte
      Rispondi
  5. Rocky1 agosto 2014 alle ore 01:14:00 GMT-7

    "Since such helpers can get quite complex, it's usually a good idea for any nontrivial test utility to have its own tests."
    Let's test the tests :)

    RispondiElimina
    Risposte
      Rispondi
  6. Jay Bazuzi1 agosto 2014 alle ore 11:39:00 GMT-7

    One way to look at this example is to say "In an attempt to apply DRY, we broke the test. In a unit test, obviousness is more important than DRY".

    I mostly agree, but I think we can do better.

    In unit tests, obviousness is more important than DRY, but DRY still matters. Maybe I can refactor my production code to keep things obvious *and* dry. If not, maybe I can factor out a test-only utility, which is itself unit-testable.

    RispondiElimina
    Risposte
      Rispondi
  7. Andrew1 agosto 2014 alle ore 15:36:00 GMT-7

    What strange advise. This runs completely counter to my experience. Unit tests should be written with the same high maintainability (and therefore Don't Repeat Yourself) requirements as production code. If you don't you end up with buggy, verbose and unmaintainable unit tests that put a drag on the project. I've written a blog post explaining why:

    http://andrewtrumper.blogspot.ca/2014/08/complex-logic-in-unit-tests.html

    RispondiElimina
    Risposte
    1. noSunPlease5 agosto 2014 alle ore 06:45:00 GMT-7

      +1

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  8. Stephen Souness4 agosto 2014 alle ore 14:31:00 GMT-7

    I'm usually the guy on my team that resists the temptation to extract out common test setup, but I would regard your example as just too trivial not to pull up.

    RispondiElimina
    Risposte
      Rispondi
  9. David Lai5 agosto 2014 alle ore 17:14:00 GMT-7

    I agree with the arguments of having the tests configurable between environments. For me I write all my tests in reference of running it locally, but when deployed on CI, they run against a deployed environment.

    But I do agree with reducing the amount of logic in your tests as possible. But where I draw a line is usually at branching instead of simple string concatenation. When you see a 'if' or 'switch' statement, that's when a test starts to smell bad.

    RispondiElimina
    Risposte
      Rispondi
  10. Ahhlecks6 agosto 2014 alle ore 04:08:00 GMT-7

    I think this is a bad example. If you do not run your test to ensure it's green when written, then you do not need to write a test at all. This "simple" bug would be found instantly after the first test, whats the big deal?

    RispondiElimina
    Risposte
    1. LanguageChallenge22 agosto 2016 alle ore 08:22:00 GMT-7

      agree

      Elimina
      Risposte
        Rispondi
    2. Rispondi
  11. David Lai8 agosto 2014 alle ore 10:10:00 GMT-7

    I think a better example would be the use of many if/else statements to handle the differences between a mobile view and a desktop view of the same page within the page object. Vs. using a higher level abstraction level such as abstract factories.

    RispondiElimina
    Risposte
      Rispondi
Aggiungi commento
Carica altro...

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)
    • ►  ott (1)
    • ►  lug (1)
    • ►  giu (1)
    • ►  mag (2)
    • ►  apr (1)
    • ►  mar (2)
  • ►  2025 (3)
    • ►  ott (1)
    • ►  set (1)
    • ►  gen (1)
  • ►  2024 (13)
    • ►  dic (1)
    • ►  ott (1)
    • ►  set (1)
    • ►  ago (1)
    • ►  lug (1)
    • ►  mag (3)
    • ►  apr (3)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2023 (14)
    • ►  dic (2)
    • ►  nov (2)
    • ►  ott (5)
    • ►  set (3)
    • ►  ago (1)
    • ►  apr (1)
  • ►  2022 (2)
    • ►  feb (2)
  • ►  2021 (3)
    • ►  giu (1)
    • ►  apr (1)
    • ►  mar (1)
  • ►  2020 (8)
    • ►  dic (2)
    • ►  nov (1)
    • ►  ott (1)
    • ►  ago (2)
    • ►  lug (1)
    • ►  mag (1)
  • ►  2019 (4)
    • ►  dic (1)
    • ►  nov (1)
    • ►  lug (1)
    • ►  gen (1)
  • ►  2018 (7)
    • ►  nov (1)
    • ►  set (1)
    • ►  lug (1)
    • ►  giu (2)
    • ►  mag (1)
    • ►  feb (1)
  • ►  2017 (17)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (1)
    • ►  set (1)
    • ►  ago (1)
    • ►  lug (2)
    • ►  giu (2)
    • ►  mag (3)
    • ►  apr (2)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2016 (15)
    • ►  dic (1)
    • ►  nov (2)
    • ►  ott (1)
    • ►  set (2)
    • ►  ago (1)
    • ►  giu (2)
    • ►  mag (3)
    • ►  apr (1)
    • ►  mar (1)
    • ►  feb (1)
  • ►  2015 (14)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (2)
    • ►  ago (1)
    • ►  giu (1)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (1)
    • ►  feb (1)
    • ►  gen (2)
  • ▼  2014 (24)
    • ►  dic (2)
    • ►  nov (1)
    • ►  ott (2)
    • ►  set (2)
    • ►  ago (2)
    • ▼  lug (3)
      • Testing on the Toilet: Don't Put Logic in Tests
      • The Deadline to Sign up for GTAC 2014 is Jul 28
      • Measuring Coverage at Google
    • ►  giu (3)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  feb (1)
    • ►  gen (2)
  • ►  2013 (16)
    • ►  dic (1)
    • ►  nov (1)
    • ►  ott (1)
    • ►  ago (2)
    • ►  lug (1)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (2)
    • ►  mar (2)
    • ►  gen (2)
  • ►  2012 (11)
    • ►  dic (1)
    • ►  nov (2)
    • ►  ott (3)
    • ►  set (1)
    • ►  ago (4)
  • ►  2011 (39)
    • ►  nov (2)
    • ►  ott (5)
    • ►  set (2)
    • ►  ago (4)
    • ►  lug (2)
    • ►  giu (5)
    • ►  mag (4)
    • ►  apr (3)
    • ►  mar (4)
    • ►  feb (5)
    • ►  gen (3)
  • ►  2010 (37)
    • ►  dic (3)
    • ►  nov (3)
    • ►  ott (4)
    • ►  set (8)
    • ►  ago (3)
    • ►  lug (3)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (3)
    • ►  mar (3)
    • ►  feb (2)
    • ►  gen (1)
  • ►  2009 (54)
    • ►  dic (3)
    • ►  nov (2)
    • ►  ott (3)
    • ►  set (5)
    • ►  ago (4)
    • ►  lug (15)
    • ►  giu (8)
    • ►  mag (3)
    • ►  apr (2)
    • ►  feb (5)
    • ►  gen (4)
  • ►  2008 (75)
    • ►  dic (6)
    • ►  nov (8)
    • ►  ott (9)
    • ►  set (8)
    • ►  ago (9)
    • ►  lug (9)
    • ►  giu (6)
    • ►  mag (6)
    • ►  apr (4)
    • ►  mar (4)
    • ►  feb (4)
    • ►  gen (2)
  • ►  2007 (41)
    • ►  ott (6)
    • ►  set (5)
    • ►  ago (3)
    • ►  lug (2)
    • ►  giu (2)
    • ►  mag (2)
    • ►  apr (7)
    • ►  mar (5)
    • ►  feb (5)
    • ►  gen (4)

Feed

  • Google
  • Privacy
  • Terms