Audience interaction: Questions about familiarity with TDD, usage of mocks, etc.
Encouragement to engage in conferences and share knowledge.
Personal Background
Speaker's background: Developer at Huddle, experience with .NET and TDD since 2004.
Initially faced resistance to TDD.
Issues with Current TDD Practices
Common problems:
Excessive test code compared to production code.
Slow development process due to extensive testing.
Breaking tests when refactoring.
Difficulty maintaining and understanding tests.
Growing resistance and alternative methodologies:
Techniques like program around key, lean software, and duct-tape programming favor rapid development over extensive testing.
Core Issues in TDD Practice
Key misunderstanding: Testing implementation details rather than behaviors.
Original TDD ethos: Testing should be driven by requirements, not by adding methods.
Focus should be on testing the API (publicly exposed surface area) rather than internal implementation details.
Behavior-driven approach: Given-When-Then format.
Red-Green-Refactor Cycle
Red: Write a test that fails.
Green: Make the test pass quickly, even with suboptimal code.
Refactor: Improve the code without changing its behavior.
Emphasis on not writing new tests during the refactoring step.
Aim to decouple tests from implementation details.
Ports and Adapters Architecture
Testing pyramid: Majority of tests should be developer tests, fewer integration tests, and minimal system tests.
Ports and Adapters (Hexagonal Architecture): Separate domain logic from technology-specific concerns.
Core domain (POJOs/POCOs) with adapters for interacting with external systems like databases and UI.
Ports act as entry points for different communication methods.
Tests should focus on the ports rather than internal implementation details.
Other Testing Insights
Mocks: Use sparingly; they should not be the primary method of isolating classes for unit tests.
Acceptance Test-Driven Development (ATDD): Mixed opinions; initially rejected but later reconsidered. Focus on understanding customer requirements and guiding developer tests.
Behavior-Driven Development (BDD): Initially aimed to clarify TDD by focusing on behaviors. Has since evolved into a full-scale agile methodology.
Summary
Test behaviors, not implementations.
Use Red-Green-Refactor cycle effectively.
Minimize mocks and focus on public APIs.
Adopt suitable architecture for testing, like Ports and Adapters.
Additional Resources
Recommended reading: Kent Beck's book on TDD.
Further discussions: Dialogues between Kent Beck and DHH mediated by Martin Fowler.
Conclusion
Encouragement to apply TDD principles correctly for more effective and maintainable test suites.