Modern TDD in .NET
Kursavgift: kr 13 900 | Varighet: 2 dager
|About the instructor: Jonathan Worthington |
From business applications to compiler writing, and from .Net to Perl, Jonathan has a wide range of software development experience. He deeply believes that good development has to be a strongly holistic activity, drawing on mathematics, engineering, linguistics, economics, psychology and more. By looking at insights from many fields, he works hard to deliver solid and maintainable software solutions. Originally from the UK, and having spent time in Spain and Slovakia, Jonathan is currently based in Sweden. Jonathan is also a very active open source contributor, and a popular speaker at a range of international workshops and conferences.
Participants should be comfortable with the C# language and .Net framework.
Straight To The Action: A TDD Spoiler
- Opening demonstration of using TDD to add a new feature to a system
- Dissecting the demo: test first, red/green/refactor, regression avoidance
Stepping Back: The Big Picture
- Traditional views of testing, and why they're suboptimal
- What makes TDD different?
- Why red/green/refactor?
- Why not red/green/refactor?
- Types of test
Baby Steps: Basic Unit Testing
- What is NUnit?
- Getting NUnit
- Test fixtures and tests
- The "System Under Test" pattern
- The "Arrange, Act, Assert" pattern
- Exercise on writing basic unit tests
Growing Up: Better Unit Test Design and Implementation
- Factoring out boilerplate with Setup methods
- Considering happy and sad paths
- Errors give you next steps just like successes do
- Testing for exceptions
- Tell, Don't Ask: Avoiding state inspection
- Test method granularity
- Anti-patterns to avoid
- Testing kata
- Other test runners
- The Law of Demeter: Focus on the SUT
- Exercise on writing better unit tests
- What refactoring really is
- Refactor mercilessly
- You Ain't Gonna Need It
- Once And Only Once
- Single Responsibility Principle
- Feature Envy
- Exercise on refactoring
Coping With Dependencies: Mocking, Stubbing and DI
- Why dependencies make testing harder
- The problem with new
- The Dependency Inversion solution
- Refactoring to DI
- Stubs vs. mocks
- Stubbing by hand
- Exercise on dependency injection and stubbing
Oh, The Mockery: Mock/Stub Object Frameworks
- Why consider a mock/stub object framework?
- Some of the options
- Stub objects with Rhino Mocks
- Mock objects with Rhino Mocks
- Exercise on using Rhino Mocks
Environmental Issues: Time, UIs, Databases, oh my...
- Taking control of time
- Presentation patterns for testable UIs
- Coping with data access
Higher Order Programming and Testing: IoC without the DI
- Why Inversion of Control is the really interesting thing here
- A quick lambda refresher
- Lambda injection
- Exercise on lambda injection
Functional Influences: Referentially Transparent Business Logic
- What is referential transparency?
- Why is it so desirable when doing automated testing?
- Behavioural testing and BDD
- A command/event/aggregate factoring with behavioural tests
- Exercise on referentially transparent business logic
Where To Put It: Test Organization
- Solution structure
- Unit tests and integration tests
- Organization by system under test
- Organization by specification
A testing mentality: Fitting tests into the process puzzle
- Continuous Integration
- Test Coverage Analysis
- Commit early and often
- Continous Testing
- Continuous review
- Frequent releases