Unformatted text preview:

JUnit Jan 13 2019 Test suites Obviously you have to test your code to get it working in the first place You can do ad hoc testing running whatever tests occur to you at the moment or You can build a test suite a thorough set of tests that can be run at any time Disadvantages of a test suite It s a lot of extra programming You don t have time to do all that extra work This is true but use of a good test framework can help quite a bit False Experiments repeatedly show that test suites reduce debugging time more than the amount spent building the test suite Advantages of a test suite Reduces total number of bugs in delivered code Makes code much more maintainable and refactorable This is a huge win for programs that get actual use 2 XP approach to testing In the Extreme Programming approach Tests are written before the code itself If code has no automated test case it is assumed not to work A test framework is used so that automated testing can be done after every small change to the code This may be as often as every 5 or 10 minutes If a bug is found after development a test is created to keep the bug from coming back Consequences Fewer bugs More maintainable code Continuous integration During development the program always works it may not do everything required but what it does it does right 3 JUnit JUnit is a framework for writing tests JUnit was written by Erich Gamma of Design Patterns fame and Kent Beck creator of XP methodology JUnit uses Java s reflection capabilities Java programs can examine their own code JUnit helps the programmer define and execute tests and test suites formalize requirements and clarify architecture write and debug code integrate code and always be ready to release a working version JUnit is not yet as far as I know included in Sun s SDK but an increasing number of IDEs include it BlueJ JBuilder and Eclipse now provide JUnit tools 4 Terminology A test fixture sets up the data both objects and primitives that are needed to run tests Example If you are testing code that updates an employee record you need an employee record to test it on A unit test is a test of a single class A test case tests the response of a single method to a particular set of inputs A test suite is a collection of test cases A test runner is software that runs tests and reports results An integration test is a test of how well classes work together JUnit provides some limited support for integration tests 5 Once more in pictures test suite test runner another unit test test case for one method another test case another unit test another test case another test case another test case unit test for one class test case for one method another test case test fixture A unit test tests the methods in a single class A test case tests insofar as possible a single method You can have multiple test cases for a single method A test suite combines unit tests The test fixture provides software support for all this The test runner runs unit tests or an entire test suite Integration testing testing that it all works together is not well supported by JUnit 6 How to write a JUnit test class A JUnit test class is a class you write that extends junit framework TestCase As usual you can use the default constructor or write your own constructors Your test class will inherit the following methods protected void setUp protected void tearDown This a method that will be called before each of your test methods Typically you will override this method and use it to assign values to some instance variables you need in testing This a method that will be called after each of your test methods Typically you will just ignore this method unless you need to close files You will also write any number of test methods all of which have the form public void testSomething Something is usually but not necessarily the name of the method you want to test 7 How to write a JUnit test method Your test method should start with public void testSomething where Something is any name you like typically the name of the method you are testing This is a normal Java method you can put any Java in it that you like Your method will typically use one of the assert methods such as assertEquals expected value computed value or assertTrue boolean condition You do not need to call these methods as long as they are defined as above they will be called automatically You do not need to do anything if the tests fail the framework will take care of this for you 8 A simple example Suppose you have a class Arithmetic with methods int add int x int y and boolean isPositive int x public class ArithmeticTest extends junit framework TestCase public void testMultiply assertEquals 4 Arithmetic add 2 2 assertEquals 15 Arithmetic multiply 3 5 public void testIsPositive assertTrue Arithmetic isPositive 5 assertFalse Arithmetic isPositive 5 assertFalse Arithmetic isPositive 0 9 Assert methods I Within a test An assert method is a JUnit method that performs a test and throws an AssertionFailedError if the test fails JUnit catches these Errors and shows you the result static void assertTrue boolean test static void assertTrue String message boolean test Call the method being tested and get the actual result Assert what the correct result should be with one of the assert methods These steps can be repeated as many times as necessary Throws an AssertionFailedError if the test fails The optional message is included in the Error static void assertFalse boolean test static void assertFalse String message boolean test Throws an AssertionFailedError if the test fails 10 Example Counter class For the sake of example we will create and test a trivial counter class We write the test methods before we write the code The constructor will create a counter and set it to zero The increment method will add one to the counter and return the new value The decrement method will subtract one from the counter and return the new value This has the advantages described earlier Depending on the JUnit tool we use we may have to create the class first and we may have to populate it with stubs methods with empty bodies Don t be alarmed if in this simple example the JUnit tests are more code than the class itself 11 JUnit tests for Counter public class CounterTest extends junit framework TestCase Counter counter1 public CounterTest default constructor protected void setUp creates a simple test fixture counter1 new Counter protected void tearDown no resources to release public void


View Full Document

Penn CIT 591 - JUnit

Documents in this Course
Stacks

Stacks

11 pages

Arrays

Arrays

30 pages

Arrays

Arrays

29 pages

Applets

Applets

24 pages

Style

Style

33 pages

Java

Java

32 pages

Access

Access

18 pages

Methods

Methods

29 pages

Arrays

Arrays

32 pages

Methods

Methods

9 pages

Methods

Methods

29 pages

Vectors

Vectors

14 pages

Eclipse

Eclipse

23 pages

Vectors

Vectors

14 pages

Recursion

Recursion

24 pages

Animation

Animation

18 pages

Animation

Animation

18 pages

Static

Static

12 pages

Eclipse

Eclipse

23 pages

JAVA

JAVA

24 pages

Arrays

Arrays

29 pages

Animation

Animation

18 pages

Numbers

Numbers

21 pages

JUnit

JUnit

23 pages

Access

Access

18 pages

Applets

Applets

24 pages

Methods

Methods

30 pages

Buttons

Buttons

20 pages

Java

Java

31 pages

Style

Style

28 pages

Style

Style

28 pages

Load more
Loading Unlocking...
Login

Join to view JUnit and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view JUnit and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?