Presentation is loading. Please wait.

Presentation is loading. Please wait.

Computer Science and Engineering College of Engineering The Ohio State University JUnit The credit for these slides goes to Professor Paul Sivilotti at.

Similar presentations


Presentation on theme: "Computer Science and Engineering College of Engineering The Ohio State University JUnit The credit for these slides goes to Professor Paul Sivilotti at."— Presentation transcript:

1 Computer Science and Engineering College of Engineering The Ohio State University JUnit The credit for these slides goes to Professor Paul Sivilotti at The Ohio State University. The slides have been modified a bit for use at Clemson by Professors Murali Sitaraman and Jason Hallstrom.

2 Computer Science and Engineering The Ohio State University To Ponder  Why are exams a good thing?

3 Computer Science and Engineering The Ohio State University Testing  Testing helps increase our confidence in our code “If it isn’t tested, assume it doesn’t work”  Testing is a comparison: Expected behavior of the component  See Javadoc description and/or formal specification Actual behavior of the component  Run the code  Three parts: Implementation, specification, test cases  Some believe in test-driven development Write tests first! Then write code so that all tests compile Then refine code so that all tests pass Repeat: write more tests, refine code so they pass

4 Computer Science and Engineering The Ohio State University Writing Good Tests  Goal: to expose problems! Assume role of an adversary Failure == success  Test boundary conditions e.g. 0, Integer.MAX_VALUE, empty array  Test different categories of input e.g. positive, negative, and zero  Test different categories of behavior e.g. each menu option, each error message  Test “unexpected” input e.g. null pointer, last name includes a space  Test representative “normal” input e.g. random, reasonable values

5 Computer Science and Engineering The Ohio State University Primitive Testing: println  Console IO to observe actual behavior  Compare IO with expected output  Advantages: Testing code is simple, easy, intuitive  Problems: Exhaustive testing means lots of output Comparison is tiresome and error-prone Difficult to automate

6 Computer Science and Engineering The Ohio State University Serious Testing: JUnit  A “framework” for testing Java code Frameworks are libraries with gaps Programmer writes classes following particular conventions to fill in gaps Result is the complete product  Current version of JUnit: 4 (4.4) Big changes from JUnit 3.8 Most information available online is about 3.8, the version used in class

7 Computer Science and Engineering The Ohio State University Example: TestStackImpl1 import junit.framework.*; public class TestStackImpl1 extends TestCase { private Stack s; //coding to the interface public void testPush() { s = new StackImpl1(); s.push(“A”); assertEquals(“ ”, s.toString()); } public void testClear() { s = new StackImpl1(); s.push(“A”); s.push(“B”); s.clear(); assertEquals(“<>”, s.toString()); }

8 Computer Science and Engineering The Ohio State University Vocabulary  Test case Exercises a single unit of code / behavior / functionality Test cases should be small (i.e. test one thing) Test cases should be independent In JUnit: A public method beginning with “test” in a class derived from TestCase  Test fixture Exercises a single class A collection of test cases In JUnit: A class derived from TestCase with multiple methods beginning with “test”  Test suite Exercises all the classes in a program A collection of test fixtures In JUnit: Developed using the TestSuite class (not discussed in class)

9 Computer Science and Engineering The Ohio State University Execution Model: Multiple Instances testPush() testClear() TestSI1() p testPush() testClear() TestSI1() p TestStackImpl1

10 Computer Science and Engineering The Ohio State University Execution Model: Implications  Separate instances of test class created One instance / test method  Do not use test cases with side effects Passing or failing one test case should not affect the others  Fixture: common set-up to all test cases Fields for instances of class being tested Factor initialization code into its own method Override setUp() from TestCase

11 Computer Science and Engineering The Ohio State University Good Practice: setUp()  Initialize a fixture with a setup method rather than the constructor  Reason: If the code being tested throws an exception during the setup, the output is much more meaningful

12 Computer Science and Engineering The Ohio State University Example: TestStackImpl1 import junit.framework.*; public class TestStackImpl1 extends TestCase { private Stack s; //coding to the interface public void setUp() { s = new StackImpl1(); s.push(“A”); } public void testPush() { assertEquals(“ ”, s.toString()); } public void testClear() { s.push(“B”); s.clear(); assertEquals(“<>”, s.toString()); }

13 Computer Science and Engineering The Ohio State University Execution Model testPush() testClear() TestSI1() p testPush() testClear() TestSI1() p TestStackImpl1 2 2 setUp() 1 1

14 Computer Science and Engineering The Ohio State University Assertions  Different kinds of tests assertEquals (message, expected, actual); assertTrue (message, condition); assertFalse (message, condition); assertNull (message, object); assertNotNull (message, object);  Note: message argument not discussed in class --- but very useful!

15 Computer Science and Engineering The Ohio State University Good Practice: assertEquals  Prefer assertEquals to assertTrue assertEquals is overloaded  Expected and actual can be primitives or references Failed test case produces useful output junit.framework.AssertionFailedError: Age at birth expected: but was: Compare with assertTrue junit.framework.AssertionFailedError: Age at birth  Use 3-argument version (not discussed in class) 1 st argument: String to display on failure assertEquals(String msg, int expected, int actual)

16 Computer Science and Engineering The Ohio State University Good Practice: Comparing Floats  Never compare floating point numbers directly for equality assertEquals(“Low-density experiment”, 1.456, calculated); Numeric instabilities make exact equality problematic  Better approach: Equality with tolerance assertEquals(“Low-density experiment”, 1.456, calculated, 0.001);

17 Computer Science and Engineering The Ohio State University Eclipse Demo  New > JUnit Test Case  First screen of wizard: Checkbox “New JUnit 3 Test” Enter name of test class (e.g. TestThing) Enter name of “class under test” (e.g. Thing) If warning “JUnit 3 not on build path” appears, click link to add it to build path  Second screen of wizard: Select methods to test Generates one test case / selected method But you will need many more than that  To run, Run As… > JUnit Test Case

18 Computer Science and Engineering The Ohio State University Specification vs Implementation  Tests can be written for either Specification tests test only behavior promised in Javadoc (or specification) of interface Implementation tests test all behavior documented in Javadoc (or specification) of class  Examples: Interface does not guarantee order of elements in a returned array, but implementation always has them in sorted order  Specification tests work for all (correct) classes implementing the given interface

19 Computer Science and Engineering The Ohio State University Good Practice: Organization  Keep test classes in the same project as the code They are part of the build Helps to keep tests current  Name test classes consistently e.g. TestWritingStick tests WritingStick  Group tests in same package, but different source folder as the code e.g. project X9, package cu.cs:  Code: X9/src/cu/cs/WritingStick.java  Tests: X9/test/cu/cs/TestWritingStick.java Tests can see public and package-visible stuff

20 Computer Science and Engineering The Ohio State University Supplemental Reading  JUnit web site http://www.junit.org See “Getting Started”  JUnit FAQ http://junit.sourceforge.net/doc/faq/faq.htm  JUnit cookbook http://junit.sourceforge.net/doc/cookbook/cookbo ok.htm  IBM developerWorks “An Early Look at JUnit 4” http://www- 128.ibm.com/developerworks/java/library/j- junit4.html Assumes JUnit 3.8 background

21 Computer Science and Engineering The Ohio State University Summary  Nature of testing Specification, implementation, test cases  JUnit overview Test case: method beginning with “test” Test fixture: class collecting common tests Test suite: set of fixtures Assertions  Execution model Multiple instantiation of test class Independence of test cases


Download ppt "Computer Science and Engineering College of Engineering The Ohio State University JUnit The credit for these slides goes to Professor Paul Sivilotti at."

Similar presentations


Ads by Google