Driving Your C# Code with Tests
Testing forms an integral part of the modern software development flow. From customer-facing acceptance tests to code-focused unit tests, automated testing is part of the fabric of a modern build process and deployment pipeline. But it's not enough that there are some tests: to be a help, not a hindrance, tests need to communicate not just verify, and testing needs to be a development habit, not an afterthought. In this online course, you will learn about good unit tests (GUTs) and test-driven development (TDD) by seeing what it takes, putting them into practice, and reviewing what you've learned. What practices support readable and maintainable tests? What test pitfalls hold developers and products back? How do you make testing fun and not a chore? Join us to answer these questions and more. The examples and hands-on exercises will use C# and NUnit, but you don't need to be a C# guru to take part.
Topics covered include:
- What do we mean by unit tests?
- How do unit tests fit into the testing and development landscape?
- What do GUTs look like?
- The elements of TDD
- Core NUnit features
- Data-driven tests and how to choose test data
- Test naming and nesting
- The anatomy of test cases and test suites
- Plain ol' unit testing (POUT), defect-driven testing (DDT) and iterative test-last (ITL)
- Identifying and adjusting overfitting and underfitting tests
- Reasons writing tests can be hard, and how to respond
- Mocks, stubs and other test doubles
- When to use values instead of test doubles
- Testing and legacy code
Kevlin is an independent consultant, speaker, writer and trainer. His development interests, contributions and work with companies covers programming, people and practice. He has contributed to open- and closed-source codebases, been a columnist for a number of magazines and sites and has been on far too many committees (it has been said that "a committee is a cul-de-sac down which ideas are lured and then quietly strangled"). He is co-author of A Pattern Language for Distributed Computing and On Patterns and Pattern Languages, two volumes in the Pattern-Oriented Software Architecture series. He is also editor of 97 Things Every Programmer Should Know and 97 Things Every Java Programmer Should Know. He lives in Bristol and online.