The Art of Unit Testing (with examples in C#)