Junit Automated Software Testing Framework: Paul Ammann & Jeff Offutt
Junit Automated Software Testing Framework: Paul Ammann & Jeff Offutt
Junit Automated Software Testing Framework: Paul Ammann & Jeff Offutt
www.introsoftwaretesting.com
What is JUnit?
Open source Java testing framework used to write and run
repeatable automated tests A structure for writing test drivers JUnit features include:
Assertions for testing expected results Test features for sharing common test data Test suites for easily organizing and running tests Graphical and textual test runners
JUnit is widely used in industry JUnit can be used as stand alone Java programs (from the
JUnit Tests
JUnit is used to test
an entire object part of an object a method or some interacting methods interaction between several objects
to the test runner whether the test failed or succeeded The test runner uses the result to report to the user (in command line mode) or update the display (in an IDE) All of the methods return void A few representative methods of junit.framework.assert
assertTrue (boolean) assertTrue (String, boolean) assertEquals (Object, Object) assertNull (Object) Fail (String)
Ammann & Offutt
Sample Assertions
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/org/junit/Assert.html
In JUnit 3.X
Different tests can use the objects without sharing the state Objects used in test fixtures should be declared as instance
variables They should be initialized in a @Before method Can be deallocated or reset in an @After method
static public long add (int a, int b) { return a + b; import org.junit.Test } Import static org.junit.Assert.*; public class CalcTest { @Test public void testAdd() { // Calc().add() returns long, // so we must cast 5 assertEquals ((long) 5, new Calc().add (2,3)) } }
Introduction to Software Testing (Ch 1), www.introsoftwaretesting.com Ammann & Offutt 8
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)) public boolean repOk() { buf.append (", "); if (elements == null) return false; buf.append if (size != elements.length) return fa (elements[ i ].toString()); for (int i = 0; i < size; i++) { } if (elements[i] == null) return fals buf.append ("}"); } return buf.toString(); return true; } } 9 Ammann & Offutt Introduction to Software Testing (Ch 1), www.introsoftwaretesting.com }
10
12
This is all that is needed to run JUnit in an IDE (like Eclipse) We need a main() for command line execution
13
AllTests
import org.junit.runner.RunWith; import org.junit.runners.Suite; import junit.framework.JUnit4TestAdapter; // This section declares all of the test classes in the program. @RunWith (Suite.class) @Suite.SuiteClasses ({ StackTest.class }) // Add test classes here. public class AllTests { // Execution begins at main(). In this test class, we will execute // a text test runner that will tell you if any of your tests fail. public static void main (String[] args) { junit.textui.TestRunner.run (suite()); } // The suite() method is helpful when using JUnit 3 Test Runners or Ant. public static junit.framework.Test suite() {Testing (Ch 1), www.introsoftwaretesting.com Ammann & Offutt Introduction to Software return new JUnit4TestAdapter (AllTests.class);
14
If a test fails, JUnit gives the location of the failure and any
15
JUnit Resources
Some JUnit tutorials
http://open.ncsu.edu/se/tutorials/junit/ (Laurie Williams, Dright Ho, and Sarah Smith ) http://www.laliluna.de/eclipse-junit-testing-tutorial.html (Sascha Wolski and Sebastian Hennebrueder)
http://www.diasparsoftware.com/template.php?content=jUnitStarterGuide
16
Summary
The only way to make testing efficient as well as effective is to
automate as much as possible JUnit provides a very simple way to automate our unit tests It is no silver bullet however it does not solve the hard problem of testing :
17