Put debugging tips inside the test cases when you provide students with JUnit test cases to help students improve their own debugging abilities in Java.

  • Debugging tips often seem pointless and obvious to students when they don’t currently have a bug they’re trying to fix.
  • At that moment a test case fails, students will need to start debugging.
    • They'll look at the specific JUnit test case when it fails, which gives you a just in time delivery model for debugging tips.
    • If there are debugging suggestions within each test case, you can direct students to effective debugging strategies when they really need them.
  • Below is an example of JUnit tests with debugging tips embedded inside the test cases:
    import java.util.Arrays;
    import junit.framework.TestCase;
    public class Hw4pr3Test extends TestCase {
        // Examples of tips for debugging!
        public void testAppend_3_3_length() {
            int[] input1 = { 10, 20, 30 };
            int[] input2 = { 40, 50, 60 };
            int[] output = Hw7pr2.append(input1, input2);
            assertTrue(output.length == 6);
            // DEBUGGING: if this test case fails, try:
            // -- printing out output.length to see if it is too small or too big.
            // -- writing a simpler test case to see if the method works for simpler cases.
            // -- running only this test case (double click on the test name and then click "Run") so that it is easier to see your print statements.
            // -- adding print statements to the append method to see if it is behaving as you expect.
            // -- setting a breakpoint inside the append method to see if it is behaving as you expect.
        }

        // Examples of (well formatted) print statements that the students might use
        public void testAppend_3_3() {
            int[] input1 = { 10, 20, 30 };
            int[] input2 = { 40, 50, 60 };
            int[] correct = { 10, 20, 30, 40, 50, 60 };
            int[] output = Hw7pr2.append(input1, input2);
            // DEBUGGING: Remove comment for debugging (and double check variables being printed)
            // System.out.println("*** testAppend_3_3 ***");
            // System.out.println("input1: " + Arrays.toString(input1));
            // System.out.println("input2: " + Arrays.toString(input2));
            // System.out.println("correct:" + Arrays.toString(correct));
            // System.out.println("output: " + Arrays.toString(output));
            assertTrue(Arrays.equals(output, correct));
        }
    }

More about this tip

External Source

Contribution from Colleen Lewis.