Unit testing involves writing small pieces of code called unit tests to test specific areas of functionality in code. A unit test verifies that a particular function or method works as expected. Frameworks like JUnit provide annotations and assertions to help write and organize unit tests. Unit tests should be written by developers and stored alongside the code being tested to ensure code quality.
3. UnitTest – 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]
4. UnitTest – 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");
}
5. UnitTesting – 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 StudioTeamTest (VSTT)
NUnit, MbUnit, Gallio, etc.
5
7. UnitTesting 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 StudioTeamTest (VSTT)
Developed by Microsoft, integrated inVS
7
8. UnitTesting 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
9. 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>
10. 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 case
10
11. 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)
13. 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;
}
}
14. JUnit based test class (fixture):
JUnit – Example
import org.junit.Test;
import static org.junit.Assert.*;
public class SumatorTest {
@Test
public void testSum() {
Sumator sumator = new Sumator();
int sum = sumator.sum(new int[] {2,3,4});
assertEquals(sum, 9);
}
}
15. 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;
}
}
16. 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 {
}
17. Eclipse and JUnit
Eclipse has
built-in
support for
integration
with JUnit
Can create,
run and
debug JUnit
tests