Testing Blog

Test first is fun!

月曜日, 9月 08, 2008
Share on Twitter Share on Facebook
Google
ラベル: Philip Zembrod

10 件のコメント :

  1. 匿名2008年9月8日 14:10:00 GMT-7

    Our team occasionally leverages TDD, and we certainly write unit tests for all our code (even if not as TDD). However, one area we continue to struggle with is how TDD applies to UI-centric code.

    It's easy enough to write a test for something functional or algorithmic (lots of inputs and outputs to check). It's not necessarily straightforward to write a test for UI code, before the code exists.

    For example, UI unit tests often test the state of visual widgets to see if they were updated properly by some data. However, you may not have decided on the type/name of each widget before writing the code, and so the test can't be meaningfully constructed.

    I'd be interested to know if you are applying TDD to UI-centric code, and if so what your recommendations are.

    返信削除
    返信
      返信
  2. Rajesh Babaria2008年9月9日 4:54:00 GMT-7

    I found a bug on the first day of release of Google Chrome.

    while entering :% in address bar it crashed. So strange.

    返信削除
    返信
      返信
  3. Ryan2008年9月9日 7:49:00 GMT-7

    Really a BIG ad for tdd, but I love it!

    Thanks for your explanation.

    返信削除
    返信
      返信
  4. Unknown2008年9月10日 9:36:00 GMT-7

    great question vvagell...anyone have any thoughts on TDD on UI code?

    返信削除
    返信
      返信
  5. Unknown2008年9月11日 2:24:00 GMT-7

    On TDD for UI code. We've had a great amount of success doing it. Our biggest gain was from separating out the mechanics of the testing from the testing itself. We did this by creating a simple scripting language, which allows us to specify tests like:

    Setup dataset1
    Load Homepage
    Set element name to foo
    Click go
    Check message is "You typed foo"

    It was a significant investment, but has paid dividends. We're testing web based apps, the script gets translated into PHP which drives a browser with COM and uses SimpleTest to make assertions. The good thing is that we don't have to worry about this complexity when writing the tests.

    返信削除
    返信
      返信
  6. Tim Kington2008年9月12日 6:16:00 GMT-7

    Another reason to make sure the test fails first is so that you're sure it's testing the right code. If you write the code to add a feature first and then the test, a passing test doesn't prove the new feature is being exercised.

    返信削除
    返信
      返信
  7. Unknown2008年9月16日 0:16:00 GMT-7

    I've never read an article on TDD that actually made me want to try it. It always seemed like so much trouble for very little gain. The way you explained the advantages makes it sound like fun! I just might try it. Thanks!

    返信削除
    返信
      返信
  8. Khaled Hussein2008年9月25日 23:26:00 GMT-7

    I have recently started looking at TDD and one of the challenges that I faced is testing private methods. I am actually curious how do you guys go about this?

    I came up with a solution that leverages aspect oriented programming, but I am not sure what would everyone else think about it.

    http://www.khussein.com/wordpress/?p=38

    Thanks,
    Khaled

    返信削除
    返信
      返信
  9. 匿名2008年9月26日 6:55:00 GMT-7

    Khaled, we use Reflection to test private methods in Java.

    However, it's always a judgment call of *which* private methods should be unit tested, since many are covered thoroughly by testing public methods.

    Here are some general guidelines:

    * Does the private method include one or more corner cases that would be challenging to test via a public method that routes through this private method? If so, maybe unit test the private method.

    * Does the private method encapsulate an algorithm with many input/output possibilities, which would be challenging to validate without direct inspection of its return values? If so, you might unit test the private method so you can easily exhaust dozens or hundreds of inputs/outputs.

    * Does the private method only get called under exceptional circumstances by public methods, that would be difficult to reproduce in a unit test? If so, you might just unit test the private method.

    I know there's a bit of a holy war around whether or not to unit test private methods (and there are certainly architectural approaches you can take from the outset, to avoid the three points I listed above), but I think it's reasonable in some cases.

    From a technical perspective, check out Reflection in Java, or see if your language of choice has something similar.

    返信削除
    返信
      返信
  10. Unknown2008年12月12日 8:19:00 GMT-8

    Hello @ all! :-)

    To the subject: "TDD with UI-centric code":
    You could try out this approach: Presenter first

    The thing with private Methods: Is private method an antipattern?!

    I hope, that I could help a little. :-)

    best regards, Christian

    返信削除
    返信
      返信
コメントを追加
もっと読み込む...

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)
    • ►  10月 (1)
    • ►  7月 (1)
    • ►  6月 (1)
    • ►  5月 (2)
    • ►  4月 (1)
    • ►  3月 (2)
  • ►  2025 (3)
    • ►  10月 (1)
    • ►  9月 (1)
    • ►  1月 (1)
  • ►  2024 (13)
    • ►  12月 (1)
    • ►  10月 (1)
    • ►  9月 (1)
    • ►  8月 (1)
    • ►  7月 (1)
    • ►  5月 (3)
    • ►  4月 (3)
    • ►  3月 (1)
    • ►  2月 (1)
  • ►  2023 (14)
    • ►  12月 (2)
    • ►  11月 (2)
    • ►  10月 (5)
    • ►  9月 (3)
    • ►  8月 (1)
    • ►  4月 (1)
  • ►  2022 (2)
    • ►  2月 (2)
  • ►  2021 (3)
    • ►  6月 (1)
    • ►  4月 (1)
    • ►  3月 (1)
  • ►  2020 (8)
    • ►  12月 (2)
    • ►  11月 (1)
    • ►  10月 (1)
    • ►  8月 (2)
    • ►  7月 (1)
    • ►  5月 (1)
  • ►  2019 (4)
    • ►  12月 (1)
    • ►  11月 (1)
    • ►  7月 (1)
    • ►  1月 (1)
  • ►  2018 (7)
    • ►  11月 (1)
    • ►  9月 (1)
    • ►  7月 (1)
    • ►  6月 (2)
    • ►  5月 (1)
    • ►  2月 (1)
  • ►  2017 (17)
    • ►  12月 (1)
    • ►  11月 (1)
    • ►  10月 (1)
    • ►  9月 (1)
    • ►  8月 (1)
    • ►  7月 (2)
    • ►  6月 (2)
    • ►  5月 (3)
    • ►  4月 (2)
    • ►  2月 (1)
    • ►  1月 (2)
  • ►  2016 (15)
    • ►  12月 (1)
    • ►  11月 (2)
    • ►  10月 (1)
    • ►  9月 (2)
    • ►  8月 (1)
    • ►  6月 (2)
    • ►  5月 (3)
    • ►  4月 (1)
    • ►  3月 (1)
    • ►  2月 (1)
  • ►  2015 (14)
    • ►  12月 (1)
    • ►  11月 (1)
    • ►  10月 (2)
    • ►  8月 (1)
    • ►  6月 (1)
    • ►  5月 (2)
    • ►  4月 (2)
    • ►  3月 (1)
    • ►  2月 (1)
    • ►  1月 (2)
  • ►  2014 (24)
    • ►  12月 (2)
    • ►  11月 (1)
    • ►  10月 (2)
    • ►  9月 (2)
    • ►  8月 (2)
    • ►  7月 (3)
    • ►  6月 (3)
    • ►  5月 (2)
    • ►  4月 (2)
    • ►  3月 (2)
    • ►  2月 (1)
    • ►  1月 (2)
  • ►  2013 (16)
    • ►  12月 (1)
    • ►  11月 (1)
    • ►  10月 (1)
    • ►  8月 (2)
    • ►  7月 (1)
    • ►  6月 (2)
    • ►  5月 (2)
    • ►  4月 (2)
    • ►  3月 (2)
    • ►  1月 (2)
  • ►  2012 (11)
    • ►  12月 (1)
    • ►  11月 (2)
    • ►  10月 (3)
    • ►  9月 (1)
    • ►  8月 (4)
  • ►  2011 (39)
    • ►  11月 (2)
    • ►  10月 (5)
    • ►  9月 (2)
    • ►  8月 (4)
    • ►  7月 (2)
    • ►  6月 (5)
    • ►  5月 (4)
    • ►  4月 (3)
    • ►  3月 (4)
    • ►  2月 (5)
    • ►  1月 (3)
  • ►  2010 (37)
    • ►  12月 (3)
    • ►  11月 (3)
    • ►  10月 (4)
    • ►  9月 (8)
    • ►  8月 (3)
    • ►  7月 (3)
    • ►  6月 (2)
    • ►  5月 (2)
    • ►  4月 (3)
    • ►  3月 (3)
    • ►  2月 (2)
    • ►  1月 (1)
  • ►  2009 (54)
    • ►  12月 (3)
    • ►  11月 (2)
    • ►  10月 (3)
    • ►  9月 (5)
    • ►  8月 (4)
    • ►  7月 (15)
    • ►  6月 (8)
    • ►  5月 (3)
    • ►  4月 (2)
    • ►  2月 (5)
    • ►  1月 (4)
  • ▼  2008 (75)
    • ►  12月 (6)
    • ►  11月 (8)
    • ►  10月 (9)
    • ▼  9月 (8)
      • by Miško Hevery We talked about how it i...
      • TotT: Mockin Ur Objectz
      • Presubmit And Performance
      • The Google Maps API Open Source Their Selenium Tes...
      • Where Have all the "new" Operators Gone?
      • Test first is fun!
      • My main() Method Is Better Than Yours
      • TotT: Data Driven Traps!
    • ►  8月 (9)
    • ►  7月 (9)
    • ►  6月 (6)
    • ►  5月 (6)
    • ►  4月 (4)
    • ►  3月 (4)
    • ►  2月 (4)
    • ►  1月 (2)
  • ►  2007 (41)
    • ►  10月 (6)
    • ►  9月 (5)
    • ►  8月 (3)
    • ►  7月 (2)
    • ►  6月 (2)
    • ►  5月 (2)
    • ►  4月 (7)
    • ►  3月 (5)
    • ►  2月 (5)
    • ►  1月 (4)

Feed

  • Google
  • Privacy
  • Terms