24
An open source library for better Unit Testing Woody Zuill & Lynn Langit Agile 2012 – August 2012

Approval tests agile_aug_2012

Embed Size (px)

Citation preview

Page 1: Approval tests agile_aug_2012

An open source library for better Unit Testing

Woody Zuill & Lynn Langit

Agile 2012 – August 2012

Page 2: Approval tests agile_aug_2012

Dan

Who wrote ApprovalTests?

Llewellyn

Page 3: Approval tests agile_aug_2012

Approval Tests and Test Types

Integration Tests

Unit Tests Unit Tests

Function Tests

Performance Tests

Acceptance Tests

Installation Tests

Page 4: Approval tests agile_aug_2012

DEMO GETTING STARTED

Page 5: Approval tests agile_aug_2012

Building your Testing Toolkit

Test Runner

Test Code

Libraries

Manual tests

Automated tests & tools

Page 6: Approval tests agile_aug_2012

TDD - Red, Green, Refactor

Page 7: Approval tests agile_aug_2012

Approval Tests make it EASY…

For Woody…

• … for human evaluation of test results

• … to set up Tests

• … to modify test output for readability

• … to maintain tests

For Lynn…

• … in multiple languages

• … with visual results…

Golden Master

Page 8: Approval tests agile_aug_2012

DEMO EXPRESSIVENESS

Page 9: Approval tests agile_aug_2012

Approving the Reported Result

• Contents are serialized to a file as binary (to compare) • Rename *.received to *.approved • Right click ‘Use whole file’ • Copy ‘Move’ statement from Test Results to command window.

Page 10: Approval tests agile_aug_2012

More about

reporters…

Page 11: Approval tests agile_aug_2012

A Little About Reporters

• Reporters provide a rich, expressive, human-friendly view of a failed test.

• Reporters usually hook into DiffTools (Text, Image, Sound…) • Support for many diff tools included in Reporters • Can add hooks to your favorite diff tool

Page 12: Approval tests agile_aug_2012

Best test output has…?

Page 13: Approval tests agile_aug_2012

Best test output has...?

Granularity

• What is the result of a break

• What is the specific cause of a break

Feedback

• Frequent (or even constant) feedback

Specification

• What is this code supposed to do?

• How do we use it?

Regression-Proofing

• Did what I just do break something?

Automatic Design Process

• TDD can be thought of as Test Driven Design

Page 14: Approval tests agile_aug_2012

DEMO ARRAYS

Page 15: Approval tests agile_aug_2012

Approval Tests in Java…

Page 17: Approval tests agile_aug_2012

Code must be Testable

Page 18: Approval tests agile_aug_2012

Code must be Testable

Code must include Tests

Code should be written so that it is easy to write its required tests

“Reduce to Functional”

Code Tests must be kept runnable

Page 19: Approval tests agile_aug_2012

Unit Test Frameworks are Multi-Purpose

• Application code (components) New Code

• Functionality

• Edge cases Testing APIs

• Locking tests

• Characterization tests Legacy Code

• Scope

• Functionality

Learning new APIs

Page 20: Approval tests agile_aug_2012

Legacy Code

How much of your code base is dead code?

Page 21: Approval tests agile_aug_2012

Locking Tests (Characterization Tests)

Test to enable

refactoring

Ensures system still works the

same

Most often used with

Legacy Code

Quickly results in high test coverage

Page 22: Approval tests agile_aug_2012

DEMO Legacy Code – Chart Smart

Page 23: Approval tests agile_aug_2012

For More Information

www.ApprovalTests.com

Pick your language & download

Pick your diff tool

Reference, Approve & Enjoy

Learn more – videos (.NET)

Podcast - HerdingCode

Page 24: Approval tests agile_aug_2012

Q & A

@LynnLangit

@WoodyZuill