unit testing by svetlin nakov
TRANSCRIPT
Unit TestingBuilding Rock-Solid Software
Svetlin Nakov
Telerik Software Academyhttp://academy.telerik.com
Manager Technical Training
http://www.nakov.com
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
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
форум програмиране, форум уеб дизайнкурсове и уроци по програмиране, уеб дизайн – безплатно
програмиране за деца – безплатни курсове и уроцибезплатен 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