Building Rock-Solid Software Svetlin Nakov Telerik Software Academy Manager Technical Training
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]
int sum(int[] array) { int sum = 0; int sum = 0; for (int i=0; i<array.length; i++) for (int i=0; i<array.length; i++) sum += array[i]; sum += array[i]; return sum; return sum;} void testSum() { if (sum(new int[]{1,2}) != 3) if (sum(new int[]{1,2}) != 3) throw new TestFailedException("1+2 != 3"); throw new TestFailedException("1+2 != 3"); if (sum(new int[]{-2}) != -2) if (sum(new int[]{-2}) != -2) throw new TestFailedException("-2 != -2"); throw new TestFailedException("-2 != -2"); if (sum(new int[]{}) != 0) if (sum(new int[]{}) != 0) throw new TestFailedException("0 != 0"); throw new TestFailedException("0 != 0");}
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
JUnit The first popular unit testing framework Based on Java, written by Based on Java, written by Kent Beck & Co.Kent Beck 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 VS 7
JUnit – the first unit testing framework 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:
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 java org.junit.runner.JUnitCore
Annotates a test case Annotates methods called before/after each test Annotates methods called one time before and after all test cases in the class Ignores a test case 10
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)
Conditions assertTrue(condition) assertFalse(condition) Forced test fail fail() Expecting exception ion.class)
Java class that needs unit testing: public class Sumator { public int sum(int a, int b) { public int sum(int a, int b) { int sum = a + b; int sum = a + b; return sum; return sum; } public int sum(int... nums) { public int sum(int... nums) { int sum = 0; int sum = 0; for (int i = 0; i < nums; i++) for (int i = 0; i < nums; i++) sum += nums[i]; sum += nums[i]; return sum; return sum; }}
JUnit based test class (fixture): import org.junit.Test; import static org.junit.Assert.*; public class public void testSum() { public void testSum() { Sumator sumator = new Sumator(); Sumator sumator = new Sumator(); int sum = sumator.sum(new int[] {2,3,4}); int sum = sumator.sum(new int[] {2,3,4}); assertEquals(sum, 9); assertEquals(sum, 9); }}
JUnit text fixture with setup and cleanup: public class SumatorTest { private Sumator sumator; private Sumator public void setUpTestCase() public void setUpTestCase() { this.sumator = new Sumator(); this.sumator = new Sumator(); public void testSum() public void testSum() { int sum = sumator.sum(2, 3); int sum = sumator.sum(2, 3); assertEquals(sum, 5); assertEquals(sum, 5); public void cleanUpTestCase() public void cleanUpTestCase() { this.sumator = null; this.sumator = null; }}
Suits are sets of JUnit test classes We can define test suits with annotations: import org.junit.runner.RunWith; import org.junit.runners.Suite; Test2.class}) public class AllTests { }
Eclipse has built-in support for integration with JUnit Can create, run and debug JUnit tests
Live 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# Telerik Academy csharpfundamentals.telerik.com csharpfundamentals.telerik.com Telerik Software Academy academy.telerik.com academy.telerik.com Telerik Facebook facebook.com/TelerikAcademy facebook.com/TelerikAcademy Telerik Software Academy Forums forums.academy.telerik.com forums.academy.telerik.com