Unit testing by Svetlin Nakov

20
Unit Testing Building Rock-Solid Software Svetlin Nakov Telerik Software Academy http://academy.telerik.com Manager Technical Training http://www.nakov.com

Transcript of Unit testing by Svetlin Nakov

Unit TestingBuilding Rock-Solid Software

Svetlin Nakov

Telerik Software Academyhttp://academy.telerik.com

Manager Technical Training

http://www.nakov.com

What is Unit Testing?

Unit Test – Definition

A unit test is a piece of code written by

a developer that exercises a very small,

specific area of functionality of the code

being tested.

“Program testing can be used to show the presence of bugs, but never to show their absence!”

Edsger Dijkstra, [1972]

Unit Test – Example

int sum(int[] array) {int sum = 0;for (int i=0; i<array.length; i++)

sum += array[i];return sum;

}

void testSum() {if (sum(new int[]{1,2}) != 3)

throw new TestFailedException("1+2 != 3");if (sum(new int[]{-2}) != -2)

throw new TestFailedException("-2 != -2");if (sum(new int[]{}) != 0)

throw new TestFailedException("0 != 0");}

Unit Testing – Some Facts

Tests are pieces of code (small programs)

In most cases unit tests are written by

developers, not by QA engineers

Unit tests are released into the code repository

(TFS / SVN / Git) along with the code they test

Unit testing framework is needed

Visual Studio Team Test (VSTT)

NUnit, MbUnit, Gallio, etc.

5

Unit Testing Frameworks & JUnit

Unit Testing Frameworks

JUnit

The first popular unit testing framework

Based on Java, written by Kent Beck & Co.

Similar frameworks have been developed for a broad range of computer languages

NUnit – for C# and all .NET languages

cppUnit, jsUnit, PhpUnit, PerlUnit, ...

Visual Studio Team Test (VSTT)

Developed by Microsoft, integrated in VS7

Unit Testing Frameworks

JUnit – the first unit testing framework

www.junit.org

Based on Java

Developed by Erich Gamma and Kent Beck

Unit testing frameworks have been developed for a broad range of computer languages

NUnit – for C#, VB.NET and .NET languages

cppUnit, DUnit, jsUnit, PhpUnit, PerlUnit, ...

List of xUnit frameworks can be found at: http://www.testingfaqs.org/t-unit.html

JUnit – Features

Test code is annotated using Java 5 annotations

Test code contains assertions

Tests are grouped in test fixtures and test suites

Several execution interfaces

Eclipse integrated plug-in

Console interface:

java org.junit.runner.JUnitCore <test-class>

JUnit – Annotations

@Test

Annotates a test case method

@Before, @After

Annotates methods called before/after each test case

@BeforeClass, @AfterClass

Annotates methods called one time before and after all test cases in the class

@Ignore

Ignores a test case10

JUnit – Assertions

Using org.junit.Assert class

Assertions check a condition and throw exception if the condition is not satisfied

Comparing values

assertEquals ([message], expected value, calculated value)

Comparing objects

assertNull([message], object)

assertNotNull([message], object)

assertSame ([message], expected obj, calculated obj)

JUnit – Assertions (2)

Conditions

assertTrue(condition)

assertFalse(condition)

Forced test fail

fail()

Expecting exception

@Test(expected=IndexOutOfBoundsExcept

ion.class)

Java class that needs unit testing:

JUnit – Example

public class Sumator {

public int sum(int a, int b) {int sum = a + b;return sum;

}

public int sum(int... nums) {int sum = 0;for (int i = 0; i < nums; i++)

sum += nums[i];return sum;

}

}

JUnit based test class (fixture):

JUnit – Example

import org.junit.Test;import static org.junit.Assert.*;

public class SumatorTest {

@Testpublic void testSum() {

Sumator sumator = new Sumator();int sum = sumator.sum(new int[] {2,3,4});assertEquals(sum, 9);

}

}

JUnit text fixture with setup and cleanup:

JUnit – Example

public class SumatorTest {private Sumator sumator;@Before public void setUpTestCase() {

this.sumator = new Sumator();}@Test public void testSum() {

int sum = sumator.sum(2, 3);assertEquals(sum, 5);

}@After public void cleanUpTestCase() {

this.sumator = null;}

}

Test Suites

Suits are sets of JUnit test classes

We can define test suits with annotations:

import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;

@RunWith(value=Suite.class)@SuiteClasses(value={Test1.class, Test2.class})public class AllTests {

}

Eclipse and JUnit

Eclipse has

built-in

support for

integration

with JUnit

Can create,

run and

debug JUnit

tests

Testing with JUnitLive Demo

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

програмиране за деца – безплатни курсове и уроцибезплатен 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# курс, програмиране, безплатно

Unit Testing

http://academy.telerik.com

Free Trainings @ Telerik Academy

C# Programming @ Telerik Academy

csharpfundamentals.telerik.com

Telerik Software Academy

academy.telerik.com

Telerik Academy @ Facebook

facebook.com/TelerikAcademy

Telerik Software Academy Forums

forums.academy.telerik.com