万本电子书0元读

万本电子书0元读

顶部广告

Test-Driven Java Development - Second Edition电子书

售       价:¥

6人正在读 | 0人评论 9.8

作       者:Alex Garcia,Viktor Farcic

出  版  社:Packt Publishing

出版时间:2018-03-23

字       数:38.5万

所属分类: 进口书 > 外文原版书 > 电脑/网络

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
This book will teach the concepts of test driven development in Java so you can build clean, maintainable and robust code About This Book ? Explore the most popular TDD tools and frameworks and become more proficient in building applications ? Create applications with better code design, fewer bugs, and higher test coverage, enabling you to get them to market quickly ? Implement test-driven programming methods into your development workflows Who This Book Is For If you're an experienced Java developer and want to implement more effective methods of programming systems and applications, then this book is for you. What You Will Learn ? Explore the tools and frameworks required for effective TDD development ? Perform the Red-Green-Refactor process efficiently, the pillar around which all other TDD procedures are based ? Master effective unit testing in isolation from the rest of your code ? Design simple and easily maintainable code by implementing different techniques ? Use mocking frameworks and techniques to easily write and quickly execute tests ? Develop an application to implement behavior-driven development in conjunction with unit testing ? Enable and disable features using feature toggles In Detail Test-driven development (TDD) is a development approach that relies on a test-first procedure that emphasizes writing a test before writing the necessary code, and then refactoring the code to optimize it.The value of performing TDD with Java, one of the longest established programming languages, is to improve the productivity of programmers and the maintainability and performance of code, and develop a deeper understanding of the language and how to employ it effectively. Starting with the basics of TDD and understanding why its adoption is beneficial, this book will take you from the first steps of TDD with Java until you are confident enough to embrace the practice in your day-to-day routine.You'll be guided through setting up tools, frameworks, and the environment you need, and we will dive right into hands-on exercises with the goal of mastering one practice, tool, or framework at a time. You'll learn about the Red-Green-Refactor procedure, how to write unit tests, and how to use them as executable documentation.With this book, you'll also discover how to design simple and easily maintainable code, work with mocks, utilize behavior-driven development, refactor old legacy code, and release a half-finished feature to production with feature toggles.You will finish this book with a deep understanding of the test-driven development methodology and the confidence to apply it to application programming with Java. Style and approach An easy-to-follow, hands-on guide to building applications through effective coding practices. This book covers practical examples by introducing different problems, each one designed as a learning exercise to help you understand each aspect of TDD.
目录展开

Title Page

Copyright and Credits

Test-Driven Java Development Second Edition

Packt Upsell

Why subscribe?

PacktPub.com

Contributors

About the authors

About the reviewer

Packt is searching for authors like you

Preface

Who this book is for

What this book covers

To get the most out of this book

Download the example code files

Download the color images

Conventions used

Get in touch

Reviews

Why Should I Care for Test-Driven Development?

Why TDD?

Understanding TDD

Red-Green-Refactor

Speed is the key

It's not about testing

Testing

Black-box testing

White-box testing

The difference between quality checking and quality assurance

Better tests

Mocking

Executable documentation

No debugging

Summary

Tools, Frameworks, and Environments

Git

Virtual machines

Vagrant

Docker

Build tools

The integrated development environment

The IDEA demo project

Unit-testing frameworks

JUnit

TestNG

Hamcrest and AssertJ

Hamcrest

AssertJ

Code coverage tools

JaCoCo

Mocking frameworks

Mockito

EasyMock

Extra power for mocks

User interface testing

Web-testing frameworks

Selenium

Selenide

Behavior-driven development

JBehave

Cucumber

Summary

Red-Green-Refactor – From Failure Through Success until Perfection

Setting up the environment with Gradle and JUnit

Setting up Gradle/Java project in IntelliJ IDEA

The Red-Green-Refactor process

Writing a test

Running all the tests and confirming that the last one is failing

Writing the implementation code

Running all the tests

Refactoring

Repeating

Tic-Tac-Toe game requirements

Developing Tic-Tac-Toe

Requirement 1 – placing pieces

Test – board boundaries I

Implementation

Test – board boundaries II

Implementation

Test – occupied spot

Implementation

Refactoring

Requirement 2 – adding two-player support

Test – X plays first

Implementation

Test – O plays right after X

Implementation

Test – X plays right after O

Requirement 3 – adding winning conditions

Test – by default there's no winner

Implementation

Test – winning condition I

Implementation

Refactoring

Test – winning condition II

Implementation

Test – winning condition III

Implementation

Test – winning condition IV

Implementation

Refactoring

Requirement 4 – tie conditions

Test – handling a tie situation

Implementation

Refactoring

Code coverage

More exercises

Summary

Unit Testing – Focusing on What You Do and Not on What Has Been Done

Unit testing

What is unit testing?

Why unit testing?

Code refactoring

Why not use unit tests exclusively?

Unit testing with TDD

TestNG

The @Test annotation

The @BeforeSuite, @BeforeTest, @BeforeGroups, @AfterGroups, @AfterTest, and @AfterSuite annotations

The @BeforeClass and @AfterClass annotations

The @BeforeMethod and @AfterMethod annotations

The @Test(enable = false) annotation argument

The @Test(expectedExceptions = SomeClass.class) annotation argument

TestNG versus JUnit summary

Remote-controlled ship requirements

Developing the remote-controlled ship

Project setup

Helper classes

Requirement – starting point and orientation

Specification – keeping position and direction in memory

Implementation

Refactoring

Requirement – forward and backward moves

Specification – moving forward

Implementation

Specification – moving backward

Implementation

Requirement – rotating the ship

Specification – turning left

Implementation

Specification – turning right

Implementation

Requirement – commands

Specification – single commands

Implementation

Specification – combined commands

Implementation

Requirement – representing spheric maps

Specification – planet information

Implementation

Refactoring

Specification – dealing with map boundaries

Implementation

Requirement – detecting obstacles

Summary

Design – If It's Not Testable, It's Not Designed Well

Why should we care about design?

Design principles

You Ain't Gonna Need It

Don't Repeat Yourself

Keep it simple, stupid

Occam's razor

SOLID principles

Connect 4

Requirements

Test-last implementation of Connect 4

Requirement 1 – the game's board

Requirement 2 – introducing discs

Requirement 3 – player shifts

Requirement 4 – the game's output

Requirement 5 – win conditions (I)

Requirement 6 – win condition (II)

Requirement 7 – win condition (III)

Requirement 8 – win condition (IV)

The TDD or test-first implementation

Hamcrest

Requirement 1 – the game's board

Requirement 2 – introducing discs

Requirement 3 – player shifts

Requirement 4 – the game's output

Requirement 5 – win condition (I)

Requirement 6 – win condition (II)

Requirement 7 – win condition (III)

Requirement 8 – win condition (IV)

Final considerations

Summary

Mocking – Removing External Dependencies

Mocking

Why mocks?

Terminology

Mock objects

Mockito

Tic-Tac-Toe v2 requirements

Developing Tic-Tac-Toe v2

Requirement 1 – store moves

Specification – DB name

Implementation

Specification – a name for the Mongo collection

Implementation

Refactoring

Specification – adding items to the Mongo collection

Implementation

Specification – adding operation feedback

Implementation

Refactoring

Specification – error handling

Implementation

Specification – clear state between games

Implementation

Specification – drop operation feedback

Implementation

Specification – error handling

Implementation

Requirement 2 – store every turn

Specification – creating new collection

Implementation

Specification refactoring

Specification – storing current move

Implementation

Specification – error handling

Implementation

Specification – alternate players

Implementation

Exercises

Integration tests

Tests separation

The integration test

Summary

TDD and Functional Programming – A Perfect Match

Setting up the environment

Optional – dealing with uncertainty

Example of Optional

Functions revisited

Kata – Reverse Polish Notation

Requirements

Requirement – handling invalid input

Requirement – single operations

Requirement – complex operations

Streams

filter

map

flatMap

reduce

Summary

BDD – Working Together with the Whole Team

Different specifications

Documentation

Documentation for coders

Documentation for non-coders

Behavior-driven development

Narrative

Scenarios

The book store BDD story

JBehave

JBehave runner

Pending steps

Selenium and Selenide

JBehave steps

Final validation

Summary

Refactoring Legacy Code – Making It Young Again

Legacy code

Legacy code example

Other ways to recognize legacy code

A lack of dependency injection

The legacy code change algorithm

Applying the legacy code change algorithm

Identifying change points

Finding test points

Breaking dependencies

Writing tests

The kata exercise

Legacy kata

Description

Technical comments

Adding a new feature

Black-box or spike testing

Preliminary investigation

How to find candidates for refactoring

Introducing the new feature

Applying the legacy code algorithm

Writing end-to-end test cases

Automating the test cases

Injecting the BookRepository dependency

Extract and override call

Parameterizing a constructor

Adding a new feature

Removing the primitive obsession with status as int

Summary

Feature Toggles – Deploying Partially Done Features to Production

Continuous integration, delivery, and deployment

Feature Toggles

A Feature Toggle example

Implementing the Fibonacci service

Working with the template engine

Summary

Putting It All Together

TDD in a nutshell

Best practices

Naming conventions

Processes

Development practices

Tools

Summary

Leverage TDD by Implementing Continuous Delivery

Case study – Awesome Gambling Corp

Exploring the codebase

Release procedure

Deployments to production

Conclusions

Possible improvements

Increasing test coverage

Implementing continuous integration

Towards continuous delivery

Jenkins installation

Automating builds

First execution

What is next?

This is just the beginning

This does not have to be the end

Summary

Other Books You May Enjoy

Leave a review - let other readers know what you think

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部