Graham Lee, professional in-betweener, @iamleeg
Or, “What is TDD and why should you use it?”
- discovering bugs is not the point of testing at all
- instead, you are proving that there aren’t bugs
 
 - once we’ve fixed bugs, we don’t want to see them ever again
- tests can ensure that regressions don’t come back
 
 - TDD allows us to prevent bugs from ever happening!
- you won’t prove that the app works how the customer expects, but you will at least prove that it works how you expect it to work…
 
 - TDD imposes black-box thinking for the developer
- makes you think about how the code should be designed and scoped
 
 - accurate planning: we know how much we’ve done
- and we can be honest how much we have done
 
 - TDD does not:
- ensure that the developer understood the requirements!
 - ensure that the requirements remain static
 - ensure that pieces work together (unless you add integration tests)
 
 - tests should be short and have descriptive, English names
- e.g. 
testDatesOnTheSameDayAreConsideredSame - general pattern 
 
 - e.g. 
 - tests should be fast — well under a hundredth of a second each, so a second or so for all of them
- avoid integration tests in unit testing since they take too long
 - don’t interrupt your concentration by waiting for tests
 
 - as a result, your classes will be smaller and have obvious effects
- any side-effects are few and easy to predict
 - if your test fixture gets big, then that’s a sign that you need to refactor (possibly including the tests!)
 
 - TDD encourages “tell, don’t ask” configuration
- inversion of control
 - pass in helper data rather than discover it internally
 
 - avoiding testing everything at once:
- use fake objects (with same interfaces) to provide simulated interactions
 - use mock objects to record and verify interactions
 
 - Objective-C mock frameworks:
- OCMock
 - Mocky
 
 - Code coverage is useful for adding tests to an existing app
- Not so useful for building new code
 - If you’re not covering code with TDD, then you’re kind of cheating yourself
 
 
Q&A
- @pilky knows about using the accessibility framework to write automated UI tests using javascript
 - can use XCodeBuild to run unit tests from command line
 - use GHUnit instead of built-in OCUnit to output JUnit XML reports
 - iOS Enterprise Development — O’Reilly book by James Turner
- includes lots of useful
 
 - squish automated GUI testing?
 - test code linking…
- app should be plugin host, providing linked libraries
 - but it doesn’t work — have to link yourself from test code
 
 
No comments:
Post a Comment