lessons learned in programmer testinggotocon.com/dl/jaoo-sydney-2009/slides/james... · lesson #1...

Post on 20-Aug-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Lessons Learned in Programmer Testing

James Newkirk, xUnit.net and NUnit V2 LeadCodePlex Product Unit Manager

The “T” in

Test-Driven Development

is Wrong

Lesson #1

3

Words Matter

Unit Test

• Intent and purpose are wrong

• Boundary Conditions

• Pre/Post Conditions

• White Box vs. Black Box

Programmer Test

• Nobody knows what it means

• Picked the wrong word to change

Exampler

• A pattern

• I had to look it up in the dictionary

Design By Example

• It might be too late to change

4

Lessons Learned in Design By Example

James Newkirk, xUnit.net and NUnit V2 LeadCodePlex Product Unit Manager

Why Design with Examples

“There is no such thing as done. Much more investment will be spent modifying programs them developing them initially” [Beck]

“Programs are read more often than they are written” [Beck]

“Readers need to understand programs in detail and concept” [Beck]

Total Development Cost

Extend/MaintainDevelop

Understand

Change

Test

Deploy

Extend/Maintain Cost [Beck]

8

Code is our Blueprint

Write facts using the 3A pattern

Lesson #2

3A Pattern

Attributed to Bill Wake (http://xp123.com) Arrange – Setup the test harness

Act – Run the test

Assert – Check the results

Let’s look at an example!

11

A Typical Fact

12

3A Pattern

Arrange

13

3A Pattern

Act

14

3A Pattern

Assert

15

3A Summary

BenefitsReadability

Consistency

LiabilitiesMore Verbose

Might need to introduce local variables

Related IssuesOne Assert per Test?

Work Backwards

Lesson #3

17

Example

When calling the property Top on a stack it does not change the state of the Stack

Let’s write it backwards

18

Fact Example - Assert

19

Fact Example - Act

20

Fact Example - Arrange

21

Fact Example – Name the Method

22

Work Backwards Summary

BenefitsKnown – to – unknown work flow

Improves method and variable naming

LiabilitiesCan often lead to Assert/Act merging

ExpectedException leads to uncertainty

Lesson #4

24

ExpectedException Violates 3A

25

Record the Exception instead

26

Use Assert.Throws - .NET 2.0

27

More ExpectedException Problems

28

Use Assert.Throws

29

Improved Control Flow

30

Use Alternatives to ExpectedException

BenefitsReadability (these tests look like all the rest)

Identify and isolate the code where you are expecting the exception

Improved control flow

LiabilitiesAct and Assert are together in Assert.Throws

Anonymous delegate syntax in .NET Framework 2.0 is not great for readability

Be Self-Contained

Lesson #5

32

Self-Contained

33

NUnit Test

34

What’s wrong with SetUp / Teardown

Often requires class member variables

Code is located in up to 3 methods

SetUp/Teardown are often used for more than one test

35

What’s wrong with base classes?

Inheriting from a class is about identity, not about implementation inheritance

Always test each class in isolation from its environment, including parent class(es)

Consider moving utility functions to utility classes

36

Be Self-Contained

BenefitsReadability

Test isolation

LiabilitiesDuplicated initialization code

Related TopicsSmall Fixtures

Testable Object Pattern - http://shrinkster.com/wk2

Take the Next Step

Story Test-Driven Development

Lesson#6

38

Story Test-Driven Development

xUnit.net acceptance test framework

39

Acceptance Test Driven Development

BenefitsEnd-to-End Testing

Suite evolves over time to match actual customer usage

LiabilitiesPoor tooling support

Can require architectural modifications to your application

Summary

Lesson #1 – The “T” in Test-Driven Development is Wrong

Lesson #2 – Write Tests using the 3A Pattern

Lesson #3 – Work Backwards

Lesson #4 – Use Alternatives to ExpectedException

Lesson #5 – Be Self-Contained

Lesson #6 – Take The Next Step – Acceptance Test-Driven Development

Blogs

Brian Button http://www.agileprogrammer.com/oneagilecoder

Brian Marick http://www.exampler.com

Peter Provost http://peterprovost.org

Brad Wilson http://bradwilson.typepad.com

Books

[Beck] Implementation Patterns by Kent Beck, Addison-Wesley, 2008

xUnit Test Patterns by Gerard Meszaros, Addison-Wesley, 2007

Refactoring to Patterns by Joshua Kerievsky, Addison-Wesley, 2005

Contact Information

James NewkirkEmail: jamesnew@microsoft.com

Blog: http://jamesnewkirk.typepad.com

44

top related