Practical Test-Driven Development using C# 7
John Callaway, Clayton Hunt
- 403 pages
- English
- ePUB (mobile friendly)
- Available on iOS & Android
Practical Test-Driven Development using C# 7
John Callaway, Clayton Hunt
About This Book
Develop applications for the real world with a thorough software testing approachAbout This Book⢠Develop a thorough understanding of TDD and how it can help you develop simpler applications with no defects using C# and JavaScript⢠Adapt to the mindset of writing tests before code by incorporating business goals, code manageability, and other factors⢠Make all your software units and modules pass tests by analyzing failed tests and refactoring code as and when requiredWho This Book Is ForThis book is for software developers with a basic knowledge of Test Driven Development (TDD) who want a thorough understanding of how TDD can benefit them and the applications they produce. The examples in this book are in C#, and you will need a basic understanding of C# to work through these examples.What You Will Learn⢠The core concepts of TDD⢠Testing in action with a real-world case study in C# and JavaScript using React⢠Writing proper Unit Tests and testable code for your application⢠Using different types of test double such as stubs, spies, and mocks ⢠Growing an application guided by tests⢠Exploring new developments on a green-field application⢠Mitigating the problems associated with writing tests for legacy applications ⢠Modifying a legacy application to make it testableIn DetailTest-Driven Development (TDD) is a methodology that helps you to write as little as code as possible to satisfy software requirements, and ensures that what you've written does what it's supposed to do. If you're looking for a practical resource on Test-Driven Development this is the book for you. You've found a practical end-to-end guide that will help you implement Test-Driven Techniques for your software development projects.You will learn from industry standard patterns and practices, and shift from a conventional approach to a modern and efficient software testing approach in C# and JavaScript. This book starts with the basics of TDD and the components of a simple unit test. Then we look at setting up the testing framework so that you can easily run your tests in your development environment. You will then see the importance of defining and testing boundaries, abstracting away third-party code (including the.NET Framework), and working with different types of test double such as spies, mocks, and fakes.Moving on, you will learn how to think like a TDD developer when it comes to application development. Next, you'll focus on writing tests for new/changing requirements and covering newly discovered bugs, along with how to test JavaScript applications and perform integration testing. You'll also learn how to identify code that is inherently un-testable, and identify some of the major problems with legacy applications that weren't written with testability in mind. By the end of the book, you'll have all the TDD skills you'll need and you'll be able to re-enter the world as a TDD expert!Style and approachA practical step-by-step approach with real-world case studies.
Frequently asked questions
Information
Abstract Away Problems
- Abstracting a Gravatar service
- Extending the repository pattern
- Using a generic repository and Entity Framework
Abstracting away problems
Gravatar
- s: The requested size of the image; by default, this is 80 x 80 pixel
- d: The default image if none is found; options include 404, mm (mystery-man) , identicon, and so on
- f: Force default; always return the default icon, even if an image is found
- r: Rating; users can label their image as G, PG, R, and X
Starting with an interface
public interface IGravatarService
{
string GetGravatar(string emailAddress);
string GetGravatar(string emailAddress, int size);
string GetGravatar(string emailAddress, int size, string rating);
string GetGravatar(string emailAddress, int size, string rating,
string imageType);
}
Implementing a test version of the interface
[Fact]
public void ItTakesGravatarService()
{
// Arrange
var fakeGravatarService = new FakeGravatarService();
var service = new SpeakerService(_fakeRepository, fakeGravatarService);
}
public interface IGravatarService
{
}
public SpeakerService(IRepository repository, IGravatarService gravatarService)
{
_repository = repository;
}
[Fact]
public void ItCallsGravatarService()
{
// Arrange
var expectedSpeaker = SpeakerFactory.Create(_fakeRepository);
var service = new SpeakerService(_fakeRepository, _fakeGravatarService);
// Act
service.Get(expectedSpeaker.Id);
// Assert
Assert.True(_fakeGravatarService.GetGravatarCalled);
}
public interface IGravatarService
{
void GetGravatar();
}
public class FakeGravatarService : IGravatarService
{
public bool GetGravatarCalled { get; set; }
public void GetGravatar()
{
GetGravatarCalled = true;
}
}