Download presentation
Presentation is loading. Please wait.
Published byDerrick Day Modified over 9 years ago
1
Testing in NetBeans
2
SWC Testing The ideal test: When the test is passed, the product is ready for delivery! Ideal – but (almost) impossible –Number of test cases is often very large –How does one test a GUI? –Is functional correctness all that matters?
3
SWC Testing
4
SWC Unit testing A Unit Test is aimed at testing a well-defined code module, in Java usually a single class Unit tests are at the functional level –Define test cases in terms of input to class methods (public and private) –Define the expected output for each case –Run the test –Compare expected and actual output
5
SWC Unit testing NetBeans can create a unit test framework (or ”test harness”) for a project Relies on a Java framework called JUnit (see www.junit.org) www.junit.org We also used JUnit in BlueJ
6
SWC Unit testing in NetBeans Consider our ”classic” BankAccount class, with three methods: –deposit –withdraw –getbalance Having created the class, we can now create a unit test for the class
7
SWC Unit testing in NetBeans
8
SWC Unit testing in NetBeans
9
SWC Unit testing in NetBeans
10
SWC Unit testing in NetBeans There are quite a lot of options to choose from when generating a test class… For now, just leave them as-is When pressing Finish, a unit test class is generated for us, called BankAccountTest (just choose ”Junit 4.x”) The test class is placed under Test Packages
11
SWC Unit testing in NetBeans The generated test class does look a bit complex (remember we chose all options) However, we are free to edit it! Remove whatever you do not need NetBeans can only generate a ”skeleton” for the test class – we must complete it
12
SWC Unit testing in NetBeans @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { }
13
SWC Unit testing in NetBeans The two methods setUpClass and tearDownclass allows us to include any actions needed before and after running all the test class methods, respectively –Dependencies to other classes –Database connection –Etc. Is often not used – then delete it!
14
SWC Unit testing in NetBeans @Before public void setUp() { } @After public void tearDown() { }
15
SWC Unit testing in NetBeans The two methods setUp and tearDown allows us to include any actions needed before and after running each of the test class methods, respectively –Initialising/resetting variable values –Cleaning up data structures –Etc. Is often not used – then delete it!
16
SWC Unit testing in NetBeans @Test public void testGetBalance() { System.out.println("getBalance"); BankAccount instance = new BankAccount(); int expResult = 0; int result = instance.getBalance(); assertEquals(expResult, result); // TODO review the generated test code and // remove the default call to fail. fail("The test case is a prototype."); }
17
SWC Unit testing in NetBeans Notice that a test method does not return a value (true/false) Instead, so-called assertions are used during the test An assertion can succeed or fail A failed assertion throws an exception, and the test case is considered failed
18
SWC Unit testing in NetBeans Examples of assertions: –assertEquals(expectedValue, ActualValue) –assertTrue(condition) –assertFalse(condition) –assertNotNull(object) –assertNull(object) –assertSame(object, object) –assertNotSame(object, object) –fail() // ALWAYS fails
19
SWC Unit testing in NetBeans If you inspect the generated test code, you will find that it is not very useful We must – almost always – implement the body of the test methods ourselves We are free to add more test methods than those initially generated – the test framework will run them automatically
20
SWC Unit testing in NetBeans Once the test methods have been defined properly, we can run the test Choose Run | Test Project, or just press Alt + F6 Result of test is displayed in the output window, with indicative colors
21
SWC Unit testing in NetBeans
22
SWC Unit testing in NetBeans
23
SWC Unit testing considerations In the ideal scenario, all units tests should be completely self-contained Testing of a particular class should not depend on other classes Testing of a particular method should not depend on other methods Isolates cause of failed tests
24
SWC Unit testing considerations @Test public void testDeposit() { int b = theAcc.getBalance(); theAcc.deposit(500); int a = theAcc.getBalance(); int diff = a – b; assertEquals(diff, 500); }
25
SWC Unit testing considerations Suppose now that testDeposit fails Which method in BankAccount contains an error…? Is it deposit, or getBalance...? You are wrong! No, you are wrong!
26
SWC Unit testing considerations @test public void testCubeVolume() { int volume = theCube.getVolume(); int expVolume = theMathLib.calcCube(theCube.getSide()); assertEquals(volume, expVolume); } Cube getSide getVolume MathLibrary calcCube …
27
SWC Unit testing considerations Suppose now that testCubeVolume fails Which class contains an error…? Is it Cube or MathLibrary…? You are wrong, again! No, you are wrong again!
28
SWC Unit testing considerations Testing one functionality often assumes that some other functionality already works correctly… This is quite hard to avoid in practice A rigorous approach is to use so-called test stubs
29
SWC Unit testing considerations A test stub is a ”simulation” of the behavior of a real class or method (Martin Fowler): Test stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test
30
SWC Unit testing considerations Making a test stub –Write the test, calling any external methods that are needed –Substitute all calls to external methods with calls to stub methods (Proxy…?) –Implement the stubs as returning the desired answer without any calculation
31
SWC Unit testing considerations @Test public void testCubeVolume() { int volume = theCube.getVolume(); int expVolume = theMathLibStub.calcCube(theCube.getSide()); assertEquals(volume, expVolume); }... // Code in MathLibraryStub // Only called with input = 8 in test public int calcCube(int input) { return 512; }
32
SWC Unit testing considerations Creating a test using stubs consequently can be done – but is quite labor-intensive More pragmatic approach is to use a bottom- up approach –Test basic methods/classes first (methods/classes that do not use other methods/classes) –When basic methods/classes work, test methods/classes that only use basic methods/classes –And so on (dependency tree)
33
SWC Testing – final remarks We can (almost) never expect to create a completely covering test Testing is about raising confidence in the correctness of the program Always a compromise between level of confidence and required effort
34
SWC Testing – final remarks Confidence Effort Student assignment Commer- cial word processor Space Shuttle software
35
SWC Testing – final remarks Further reading: JUnit test in NetBeans http://www.netbeans.org/kb/docs/java/junit-intro.html More about Junit in general www.junit.org …and the Net contains a lot of material about test in general!
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.