Unit Testing & Test Driven Development

Post on 06-May-2015

1.568 views 0 download

description

A presentation of mine at universtiy...

Transcript of Unit Testing & Test Driven Development

SOFTWARE UNİT TESTİNGAND

TEST DRİVEN DEVELOPMENT WİTH NUNİT FRAMEWORK

byErsan BİLİK

So.. What is Unit Testing ?

unit : smallest testable part of an application an individual program a function a procedure a method.. depends on your

viewpoint !

So.. What is Unit Testing (cont’d)

test: a means of determining the presence, quality or truth of something determining “the unit” works as it is promised

to? determining the quality of “the unit” ? determining the truth about “the unit” ?

So.. What is Unit Testing ? (cont’d)

Unit Testing : a procedure used to validate that individual units of source code are working properly. unit testing itself, is a procedure unit testing applies to individual units unit tests build-on to source code

to ensure source code is working properly

Where Unit Testing lies in Software Development Life Cycle ?

Unit testing is a white box approach in testing activity

usually, it is integrated with implementation phase but also, it depends on your software development life cycle..

What about cons and pros ?

PROS CONS

isolation of units refactoring code simplifies integration documentation seperation of interface

from implementation a good habit: motivator

for decoupled, cohesive code bodies, refactored with design patterns..

go to definition: it applies to individual units, therefore it can not guaranty the overall system will work !

it only shows the presence of errors, not absence of errors..

How to apply it ?

Manually.. step by step instructional document..

Automated tools frameworks are available.. usually called xUnit frameworks..

tell us.. HOW !

we will investigate test driven development methodology with nUnit framework based on Microsoft .NET

Test Driven Development ???

an approach for software development actually, itself is not a lifecycle model,

but an approach for implementation phase for agile software lifecycles..

it is a bottom-up approach.. think: write tests first, then code

necessary instructions to pass your tests..

Write tests first ???

yes, first write a test case. then build it.. it will fail because no code

written to pass the test implement your code as long as test case

is passed.. and voila..! YAGNI : you aint gonna need

it. So, you code as much as you need.. then think about it, how to do it better ?

Lets Code a simple Account Class

Lets Code it’s Unit Test

Now, run nUnit GUI to check results

Implement the necessary code..

Run the test again..

Are we done ?

is the code satisfies my requirements ? lets assume requirements sais: if a

customer wants to transfer money, minimum balance for the customer should be 10.00$

so, lets continue..

Add Minimum Balance field/property

Add an exception in case of overdraft

Write a new test method

Run the test

Code to generate necessary exception

Run the Test

Room for improvement

Run the Test

Handle ambiguity

thinking about transaction..

Refactor Test Code

Run the test

What should we know more ?

mock objects and their usage in unit testing..

Beyond test driven development

Check out Behaviour Driven Development

Watch video of Dave Astels ( co-author of “A

practical guide to eXtreme Programming” and author of award winning test-driven development: a practical guide)

Thanks for your patience : )

any questions or comments ?