Let's Play: Test-Driven Development
Let's Play: Test-Driven Development is a screencast series featuring Java, test-driven development, and evolutionary design. It chronicles the development of a real software project, warts and all. Each episode is about 15 minutes long.
The series ran from August 2010 to June 2012.
Episodes:
- Chapter 32: State-Based vs. Mock-Based
- #201: From Mock-Based to State-Based
- #200: To Kill a Mock
- #199: Constructor Cleanup
- #198: Removing Getters and Setters
- #197: It’s Like a Horror Movie
- #196: I Don’t Know If This is a Good Idea
- #195: A Trojan Horse
- #194: It’s Really That Simple
- #193: Turning the Application Inside Out
- #192: A Tricky Little Refactoring
- #191: The Cheat
- #190: State-Based vs. Mock-Based Testing
- #189: A State-Based Approach
- #188: How Saving Works from End to End
- Chapter 31: Save Dialog Cleanup
- #187: __Invocation
- #186: Finishing SaveAsDialog Extraction
- #185: Disentangling Our Test
- #184: This is Why We Have Tests
- #183: Extract Class
- #182: Grab Bag
- #181: invokeAndWaitFor()
- #180: There's That Race Condition Again
- Chapter 30: Exception Handler
- Chapter 29: Integrating Persistence
- #172: Persistence Can Be Tricky
- #171: Bogus Data
- #170: Back to SaveFile
- #169: Defect Prevention
- #168: Regression
- Chapter 28: Data Preservation
- #167: Finished with UserEnteredDollars
- #166: Overkill
- #165: Eliminating the Double Dispatch Problem
- #164: Core Data Type
- #163: Combinatorial Explosion
- #162: Wishing for Double Dispatch
- #161: The UserEnteredDollars Value Object
- #160: End of Week 1
- #159: How Do We Store Data?
- Chapter 27: File I/O
- #158: writeFile() and readFile()
- #157: Datum
- #156: Persistence, for Realsies
- #155: Transitioning to SaveFile
- Chapter 26: Save Dialog Interaction
- #154: Save and Cancel... Done!
- #153: Push the Button
- #152: No-ckito
- #151: Mockito
- #150: Mulling Over the Persistence Design
- Chapter 25: The “Save As” Dialog
- #149: Polishing Off the Save As Dialog
- #148: Asynchronous Assertions
- #147: Finding the Dialog
- #146: Race Condition
- #145: Displaying the FileDialog
- #144: Cost vs. Benefit
- #143: File → Save As...
- Chapter 24: File → Close
- #142: Good Enough
- #141: Domain-Specific Languages
- #140: Cleaning Up the Menu Code
- #139: File → Close
- Chapter 23: File → New
- #139: File → Close
- #138: New Windows
- #137: How Many Frames?
- #136: Accelerators
- #135: File → New
- #134: Persistence!
- Chapter 22: Revisiting the Stock Market Table
- #133: Towards an Agile Architecture
- #132: Fresh Eyes on the Domain
- #131: JComponent vs. JPanel
- Chapter 21: A Bug!
- #131: JComponent vs. JPanel
- #130: The Great Negative Color Debacle
- #129: Root Cause Analysis
- Chapter 20: More Text Fields
- #128: 2^7
- #127: Yearly Spending Field
- #126: Following Patterns
- #125: The Cost Basis Field
- #124: Constraints
- #123: MiGLayout
- #122: Extracting ConfigurationPanel
- #121: Back to the UI Vision
- Chapter 19: Icon in Text Field
- #120: DollarsTextField: Done!
- #119: Comments Lie
- #118: Coupling vs. Complexity
- #117: setIcon
- #116: You Gotta Know What You're Doing
- #115: Wrapping Up the Icon Spike
- #114: Icon Challenges
- #113: OverlayLayout?
- #112: It's in the (Grid)Bag
- #111: Icon in JTextField
- Chapter 18: Rendering Negative Text Entry
- #110: Create a Beautiful, Simple Result
- #109: Zombie TDGotchi
- #108: Wishing for First-Class Functions
- #107: The Hidden Listener
- #106: Back from the Dead
- #105: Negative TextField
- #104: Cleaned Up and Ready to Move On
- #103: Test Double
- #102: Heresy, Revisited
- Intermission: 100th Episode Special
- #100: Twenty-Five Hours
- Chapter 17: Overflow and Underflow
- #101: Factory Method
- #99: Valid Range
- #98: One Beeellion Dollars
- Chapter 16: Custom Renderers
- Chapter 15: Input Validation
- #89: The Double of Death
- #88: Cascading Failures
- #87: InvalidDollars
- #86: Pushing Down Methods
- #85: ValidDollars
- Chapter 14: Focus and Formatting
- #85: ValidDollars
- #84: Parentheses
- #83: Parsing and Formatting
- #82: Constructors, Folklore, and the Java Language Spec
- #81: Clunk... Clunk... Clunk...
- #80: Focus Lost
- #79: Focus Gained
- Chapter 13: Custom Text Field
- #78: Making Numbers Work
- #77: Buy Versus Build
- #76: Onward... Slowly
- #75: Hacking on the Custom TextField
- #74: Number Formatting Spike
- #73: Cycles
- Chapter 12: User Input with Live Updating
- #72: Starting to Look Like a Real Application
- #71: Poking at Listeners
- #70: Reflections on Incremental Design
- #69: Train Wreck
- #68: It's Sh*t Like This, Java
- #67: A Closure Would be Helpful Right About Now
- #66: Proving the ApplicationModel Design Concept
- #65: Cogitating on ApplicationModel
- #64: Integrating ApplicationModel
- #63: Simplifying StockMarketProjection
- #62: Listening Carefully
- #61: Questions of Design
- #60: Layout Managers
- Chapter 11: The Application Frame
- #59: Application... Tested!
- #58: Violating Encapsulation
- #57: Taking Over the Application Frame
- #56: Window Titles
- Chapter 10: Beautifying the UI
- #55: The Color of Failure (with Kim Gräsman)
- #54: Prognosticating (with Kim Gräsman)
- #53: Testing Styles (with Kim Gräsman)
- #52: Success! (with Roy Osherove)
- #51: Alternate Background Color (with Roy Osherove)
- #50: Code Monkey (with Roy Osherove)
- #49: The AlternatingRowTable (with Roy Osherove)
- #48: Transitioning to Production Code (with Roy Osherove)
- Chapter 9: UI Testing Research
- Chapter 8: A New Capital Gains Tax Calculation
- #42: But What's the Question?
- #41: Sell Every Year
- #40: Fixed the Capital Gains Abstraction... I Think
- #39: Torturing Myself
- #38: Torturing Rob (with Rob Myers)
- #37: Reviewing the Code (with Rob Myers)
- #36: Pair Programming! (with Rob Myers)
- #35: Right on Form
- #34: Revising the Capital Gains Tax Abstraction
- #33: Value Objects Pay Off
- Chapter 7: Cumulative Rounding Error
- #33: Value Objects Pay Off
- #32: Rounding Off Pennies
- #31: Eliminating Dollars.toInt
- #30: Introducing Dollars.percentage
- #29: More Failing
- Chapter 6: Back to the Domain Model
- Chapter 5: A Basic User Interface
- #24: Finishing Up StockMarketTableModel
- #23: Multiple Years
- #22: Hooking Up the Domain Model
- #21: Column Headers
- #20: Getting Started on the UI
- #19: UI Training
- Chapter 4: Primitive Obsession
- #18: StockMarketYear—Done!
- #17: Integrating Dollars
- #16: The Dollars Class
- #15: Integrating TaxRate and InterestRate
- #14: Obsessing Over Primitives
- #13: The TaxRate Class
- Chapter 3: Cleanup
- #13: The TaxRate Class
- #12: Polishing to a High Gloss
- #11: Consolidating the Tests
- #10: Ending Capital Gains
- #9: Seeking Beauty
- #8: Cleaning Up Taxes
- Chapter 2: Domain Logic
- #7: Tax Rage
- #6: Capital Gains Tax—Almost
- #5: Domain Logic
- #4: Gaining on Capital Gains
- Chapter 1: Testing Basics