210 likes | 240 Views
JUnit. SWE 619 Summer 2007. What is JUnit?. Open source Java testing framework used to write and run repeatable automated tests JUnit features include: Assertions for testing expected results Test fixtures for sharing common test data Test suites for easily organizing and running tests
E N D
JUnit SWE 619 Summer 2007
What is JUnit? • Open source Java testing framework used to write and run repeatable automated tests • JUnit features include: • Assertions for testing expected results • Test fixtures for sharing common test data • Test suites for easily organizing and running tests • Graphical and textual test runners SWE 619 (c) Aynur Abdurazik
JUnit Architecture SWE 619 (c) Aynur Abdurazik
Test Scenarios with JUnit • Used to test • A whole object • Part of an object - a method or some interacting methods • Interaction between several objects • A test case represents one scenario • A tester class contains more than one scenario • Each senario is written into one test method SWE 619 (c) Aynur Abdurazik
Writing Tests for JUnit • Need to use the methods of the junit.framework.assert class • javadoc gives a complete description of its capabilities • Each of these methods checks some condition and reports back to the test runner whether the test failed or succeeded. • The test runner uses the result to update the display. All of the methods return void (i.e. they are procedures) SWE 619 (c) Aynur Abdurazik
Writing Tests for JUnit – (cont’d) • A few representative methods of junit.framework.assert • assertTrue(boolean) • assertTrue(String, boolean) • assertEquals(Object, Object) • assertNull(Object) • fail(String) SWE 619 (c) Aynur Abdurazik
Sample Assertions (cont’d) • static void assertEquals(boolean expected, boolean actual) Asserts that two booleans are equal. • static void assertEquals(byte expected, byte actual) Asserts that two bytes are equal. • static void assertEquals(char expected, char actual) Asserts that two chars are equal. • static void assertEquals(double expected, double actual, double delta) Asserts that two doubles are equal concerning a delta. • static void assertEquals(float expected, float actual, float delta) Asserts that two floats are equal concerning a delta. • static void assertEquals(int expected, int actual) Asserts that two ints are equal. • For a complete list, see • http://junit.sourceforge.net/javadoc/junit/framework/Assert.html SWE 619 (c) Aynur Abdurazik
How to write test case • Two different ways for junit versions 3.X and 4.x. • In Junit 3.X • 1) import junit.framework.*2) extend TestCase. • 3) name the test methods with a prefix of ‘test’ • 4) validate conditions using one of the several assert methods SWE 619 (c) Aynur Abdurazik
How to write test case (cont’d) • In Junit 4.0 and later: • Do not extend from Junit.framework.TestCase • Do not prefix the test method with ‘test’ • Use one of the assert methods • Run the test using JUnit4TestAdapter SWE 619 (c) Aynur Abdurazik
Simple Example • public class Math { static public int add(int a, int b) { return a + b; } } SWE 619 (c) Aynur Abdurazik
Example JUnit test case import junit.framework.*; public class TestMath extends TestCase { public void testAdd() { int num1 = 3; int num2 = 2; int total = 5; int sum = 0; sum = Math.add(num1, num2); assertEquals(sum, total); } } SWE 619 (c) Aynur Abdurazik
Testing theStack class public class Stack{ public String toString() { // EFFECTS: Returns the String representation of this Stack from the // top to the bottom. StringBuffer buf = new StringBuffer("{"); for (int i = size-1; i >= 0; i--) { if (i < (size-1)) { buf.append(", "); } buf.append(elements[i].toString()); } buf.append("}"); return buf.toString(); } public boolean repOk() { if (elements == null) return false; if (size != elements.length) return false; for (int i = 0; i < size; i++) { if (elements[i] == null) return false; } return true; } } SWE 619 (c) Aynur Abdurazik
TestCases with JUnit 4.X for Stack • Necessary classes to be imported: import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import junit.framework.JUnit4TestAdapter; SWE 619 (c) Aynur Abdurazik
TestCases with JUnit (Cont’d) public class StackTest { private Stack stack; /** * setUp method using @Before annotation. * Method can be named anything. */ @Before public void runBeforeEachTest(){ stack = new Stack(); } SWE 619 (c) Aynur Abdurazik
Test case with JUnit (cont’d) @Test public void testRepOk(){ boolean result = stack.repOk(); assertEquals(true, result); stack = stack.push(new Integer(1)); result = stack.repOk(); assertEquals(true, result); stack = stack.pop(); result = stack.repOk(); assertEquals(true, result); stack = stack.push(new Integer(1)); stack.top(); result = stack.repOk(); assertEquals(true, result); } SWE 619 (c) Aynur Abdurazik
Test case with JUnit (cont’d) @Test public void testToString(){ stack = stack.push(new Integer(1)); stack = stack.push(new Integer(2)); assertEquals("{2, 1}", stack.toString()); } @After public void runAfterEachTest(){ stack = null; } public static junit.framework.Test suite(){ return new JUnit4TestAdapter(StackTest.class); } } SWE 619 (c) Aynur Abdurazik
How to Run Tests • JUnit provides test drivers • Character-based test driver runs from the command line • GUI-based test driver-junit.swingui.TestRunner • allows to specify the test class to run, • "Run" button • examines the chosen class and finds all methods whose names begin with "test." • If a test fails, Junit gives the location of the failure and any exceptions that were thrown SWE 619 (c) Aynur Abdurazik
JUnit Installation in Eclipse • In Eclipse, select Help->Software Updates->Find and Install • Choose 'Search For New Features to Install' and select 'Next' • Select 'New Remote Site' • Enter a name for this server: JUnit Factory • Enter (or copy/paste) this url: http://www.junitfactory.com/update/ • Install all plug-ins in the 'JUnit Factory' category and restart Eclipse SWE 619 (c) Aynur Abdurazik
Generating Tests in Eclipse • Select a Java class in Eclipse and click the Generate Tests ( )button • When the JUnit Factory view says your test is done, click the link in the Result column to open it • Select the test and choose Run->Run As->Agitar JUnit Test from the main menu SWE 619 (c) Aynur Abdurazik
Eclipse JUnit Plugin • See tutorial • http://open.ncsu.edu/se/tutorials/junit/ • http://www.laliluna.de/eclipse-junit-testing-tutorial.html SWE 619 (c) Aynur Abdurazik