31
Unit Testing and Test-Driven Development What is Unit Testing? How TDD Works? Tsvyqtko Konov Telerik Corporation www.telerik.com Software engineer, Telerik Corporation, Blog: http://tsvyatkokonov. blogspot.com/ http://codecourse.telerik.com/

13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Embed Size (px)

DESCRIPTION

High-Quality Code @ Telerik AcademyTelerik Software Academy: http://codecourse.telerik.com/The website and all video materials are in Bulgarian Content:So what’s a unit test?Possible testsThe xUnit Frameworks.NET unit Test FrameworksTeam System Unit TestingThe 3A PatternWhat is Test Driven Development?Development CycleWhy Refactor?Pillars of good unit tests

Citation preview

Page 1: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Unit Testing and Test-Driven

DevelopmentWhat is Unit Testing? How TDD Works?

Tsvyqtko Konov

Telerik Corporationwww.telerik.com

Software engineer,Telerik Corporation,Blog:

http://tsvyatkokonov.blogspot.com/

http://codecourse.telerik.com/

Page 2: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

So what’s a unit test?

Page 3: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

A Unit Test is a testof a small functional piece of

code

Public bool IsLoginOK(string user, string password)

{

//…………………………

}

Page 4: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Public bool IsLoginOK(string user, string password)

{

//…………………………

}

Should return true when… Should return false when…

Possible tests

Page 5: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Unit Testing makes your developer lives easier

Easier to find bugs

Easier to maintain

Easier to understand

Easier to Develop

source flickr.com

Page 6: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

You have already done Unit testing

Not structured Not Repeatable Not on all your code Not easy to do as it should be

A framework is missing

Page 7: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

The xUnit Frameworks

Original was for SmallTalk Kent Beck and Erich Gamma

Ported to Various languages and platforms

JUnit, CppUnit, DUnit, VBUnit, RUnit, PyUnit, Sunit, HtmlUnit, …

Good list at www.xprogramming.com

Standard test architecture

Page 8: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

How we use the framework

Write Tests Make it easy to create and organize tests Reference an assembly, spread some attributes, you’re

done

Run Tests Allow running all of our tests, a group or just one. From command line or GUI

Review Results Immediate Pass/Fail feedback Details on each failure

Page 9: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

.NET unit Test Frameworks

NUnit XUnit MbUnit Team System Unit Testing

Page 10: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

NUnit

Page 11: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Team System Unit Testing

Page 12: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

The 3A Pattern

Arrange all necessary preconditions and inputs.

Act on the object or method under test.

Assert that the expected results have occurred.[TestClass]

public class BankAccountTests() {

[TestMethod] public void WhenDeposit125And25_ThenTheBalance_ShouldBe150() {

BanckAccount account = new BanckAccount();

account.Deposit(125.0); account.Deposit(25.0);

Assert.AreEqual(150.0, account.Balance, "Balance is wrong.");

} }

Page 13: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Attributes

TestClass TestMethod

TestInitialize TestCleanup

ExpectedException

Ignore Description

Page 14: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

What is Test Driven Development?

TDD = Test First Development + Refactoring

Make it Fail No code without a failing test

Make it Work As simply as possible

Make it Better Refactor

Page 15: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Development Cycle

make a little change (refactor)

add a test

run the tests

run the tests

[Pass]

[Fail]

[Fail]

[Development continues]

[Development stops]

Page 16: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

DemoTDD + Code Coverage

Page 17: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Test Driven Development

TDD = Test First Development + Refactoring

But what are the advantages?

Page 18: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

What are the advantages of TDD?

TDD shortens the programming feedback loop

TDD provides detailed specification (tests)

TDD promotes the development of high-quality code

TDD provides concrete evidence that your software works

Page 19: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

What are the advantages of TDD?

(a) Traditional waterfall development process

(b) Evolutionary development process (EVO).

Page 20: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

TDD “speaks” to programmers TDD provides very finely grained concrete feedback on the order of minutes

TDD helps to ensure that your design is clean by focusing on creation of operations that are callable and testable

TDD supports evolutionary development.

What are the advantages of TDD?

Page 21: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Case Study: TDD Concerns

Defect Rate Long term and short term affect

Productivity Lines of code per month impact

Test Frequency Ratio of interactive to automated

Design Design robustness

Integration Smoothness of code integration

Page 22: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Case Study: TDD Results

Defect Rate 50% improvement

Productivity Below initial estimates (<400 LOC)

Test Frequency 86% of tests were automated

Design Aided in late changes

Integration Testing made problems surface early

Page 23: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Case Study: TDD Results(2)

Results from Microsoft Study Tested 4 products

Pre-release defect density reduces - 40% to 90%

Increase in initial development time - 15 – 35%

Page 24: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Why write the test before the code?

Think through the requirement Think about the design and

usability of the API There’s never time to write it

afterwards

You write much less tests (if at all) otherwise

Page 25: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Why make it fail first? Make sure the test does not have

a bug Make sure you’re testing the

right thing

Define a small problem to solve When the test passes, you are

done

If you can’t write that test, you may Not understand the requirement Have over designed things (not

testable) Not have a small enough problem

to solve

Page 26: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Why Refactor?

Constantly improve the design of the code

Unit tests act as safety net Remove duplication, improve

readability and maintainability

You’ll need to when things change (requirements, your understanding of them, other factors..)

Page 27: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Real World

It’s not easy to learn Dealing with legacy code Requires a lot of discipline You have to want to do it But once you do…

It gets easier and easier It’s a hard habit to let go

Page 28: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Pillars of good unit tests

Making your tests trustworthy Creating maintainable tests Readable tests – last but not

least!

Page 29: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Questions?

Page 30: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно

програмиране за деца – безплатни курсове и уроцибезплатен SEO курс - оптимизация за търсачки

уроци по уеб дизайн, HTML, CSS, JavaScript, Photoshop

уроци по програмиране и уеб дизайн за ученициASP.NET MVC курс – HTML, SQL, C#, .NET, ASP.NET MVC

безплатен курс "Разработка на софтуер в cloud среда"

BG Coder - онлайн състезателна система - online judge

курсове и уроци по програмиране, книги – безплатно от Наков

безплатен курс "Качествен програмен код"

алго академия – състезателно програмиране, състезания

ASP.NET курс - уеб програмиране, бази данни, C#, .NET, ASP.NETкурсове и уроци по програмиране – Телерик академия

курс мобилни приложения с iPhone, Android, WP7, PhoneGap

free C# book, безплатна книга C#, книга Java, книга C#Дончо Минков - сайт за програмиранеНиколай Костов - блог за програмиранеC# курс, програмиране, безплатно

?

? ? ??

?? ?

?

?

?

??

?

?

? ?

Questions?

?

Unit Testing and Test-Driven Development

http://academy.telerik.com

Page 31: 13. Unit Testing and Test-Driven Development - What is Unit Testing? How TDD Works?

Free Trainings @ Telerik Academy

“High-Quality Programming Code" course @ Telerik Academy codecourse.telerik.com

Telerik Software Academy academy.telerik.com

Telerik Academy @ Facebook facebook.com/TelerikAcademy

Telerik Software Academy Forums forums.academy.telerik.com