CSC 216/001

advertisement
CSC 216
Lecture 3
1
Unit Testing
 The most basic kind of testing is called unit
testing
 Why is it called “unit” testing?
 When should tests be written?
 Before the code for a class is written.
 After the code for a class is written, but before
other classes are written.
 After code for all classes is written, but before the
classes are integrated.
 After the classes are integrated.
2
Testing at the Boundaries
 What does this mean?
 Example (from Dr. Jo Perry)
For a method that removes an element from a list
 Test on a list with 1 element
 Test on a list that does not contain the element to be
removed
 Test on a list where the element is at the
beginning/end of the list
 Test on a list where the element appears multiple
times
 Test on an empty list
3
Testing a Square-Root Routine
From the text: What kinds of tests were
proposed?
 Test numbers greater than 1.
 Test numbers less than 1.
 Test negative numbers.
 Test randomly generated numbers.
 Apply the inverse of the square-root
operation.
4
Testing a Stack
 Suppose we have a MyStack class
implemented in an integer array.
 MyStack(int n);
 void push(int i);
 int pop();
 int top();
33
9
17
5
Testing a Stack
 Suppose we have a MyStack class
implemented in an integer array.
 MyStack(int n);
 void push(int i);
 int pop();
 int top();
15
9
17
6
Testing a Stack
 Suppose we have a MyStack class
implemented in an integer array.
 MyStack(int n);
 void push(int i);
 int pop();
 int top();
9
17
7
Testing a Stack
 Suppose we have a MyStack class
implemented in an integer array.
 MyStack(int n);
 void push(int i);
 int pop();
 int top();
17
 What test cases should we use?
8
What is JUnit?
 An open-source regression-testing framework
for Java
 JUnit’s web site: http://junit.org
 Eclipse includes JUnit
 However, you need to set it up inside each
project.
 It allows you to define regression tests for your
code and run them from the Java IDE.
9
Testing »
JUnit Test Cases
 JUnit Test Cases
 Test case
 Runs multiple tests
 Implemented as subclass of TestCase
 Define instance variables that store the state of
the tests in the class
 Initialize TestCase by overriding setUp method
 Cleanup after test case is done by overriding
tearDown method
 The Test framework will invoke the setUp and
tearDown methods.
10
Testing »
Setting up JUnit
 JUnit is in
Eclipse by
default, but
needs to be
applied to a
project by
performing a
few actions.
 First, right-click
on the name of
the package.
11
Testing »
Setting up JUnit, cont.
 From the popup menu, select “Build
Path”; then “Configure Build Path”
12
Testing »
Setting up JUnit, cont.
 Then select “Add Library” and then
“JUnit”.
13
Testing »
Setting up JUnit, cont.
 Then, when asked which version, just
click on “Finish”.
14
Creating JUnit Test Cases
in Eclipse
Testing »
 Create a new
package to
contain your test
case classes.
 Add the JUnit
JAR file to the
project’s
buildpath.
15
Creating JUnit Test Cases
in Eclipse
Testing »
 Select your testing package
 From the context menu
select New » JUnit Test
Case. This opens the New
JUnit Test Case Wizard.
 Fill in the name of your test
case in the Name field.
 Select the method stubs that
you want Eclipse to generate
 This will create the
corresponding class in your
testing package
16
Testing »
JUnit TestCase Template
public class NewTestCase extends TestCase {
public static void main(String[] args) {
}
public NewTestCase(String arg0) {
super(arg0);
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
}
17
Testing »
Cases
Adding Tests to Test
 Any method in a TestCase class is
considered a test if it begins with the
word “test”.
 You can write many tests (have many test
methods)
 Each test method should use a variety
of assert… methods to perform tests
on the state of its class.
18
Testing »
JUnit Assert Methods
 Assert methods include:







assertTrue(boolean)
assertFalse(boolean)
assertNull(object)
assertNotNull(object)
assertEquals(x,y)
assertSame(firstObject, secondObj)
assertNotSame(firstObject, secondObj)
19
Testing »
Example of a Test Case
package stackTests;
import junit.framework.TestCase;
import stack.MyStack;
public class Tests extends TestCase {
protected void setUp() throws Exception {
super.setUp();
}
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testPush() {
MyStack = new MyStack(5);
m.push(27);
assertEquals(m.pop(), 27);
}
20
Testing »
Case
Running JUnit Test
 Select TestCase
class
 From the Run menu
select Run » Run As
» JUnit Test
 This will run the
tests in your
TestCase class along
with the setUp and
tearDown methods
 You will then get a
report in the JUnit
window
21
Testing »
JUnit Window
 Red indicates a test
has failed
 You can see which
test failed
 You can see the
call trace leading to
the failure
22
Testing »
JUnit Window
 You can see how
many tests ran
 How many
failures occurred
 You can see the
details of the failure
 Errors occur when
exceptions are
thrown (e.g., when
assertions fail)
23
Testing »
Exercise
 Go through the Stack class and add
additional unit tests.
 The stack class is at
 http://courses.ncsu.edu
/csc216/lec/001/exercises/stack.java
 Submit one of your test cases here.
24
Important terms
 Black-box testing
 White-box testing
 Regression testing
 Test coverage
25
Download