Tutorial

Video Icon

In the near future we will upload videos for every chapter of the tutorial which will lead you step by step through QF-Test.

15.3
Advanced debugging of variable bindings

Next, we want to explore the variable bindings table and see how it can be used for debugging purposes. For this reason do not correct the faulty value of the procedure call we added in the last section, but let us find out more about debugging.

In the next steps we want to let QF-Test pause the test execution at the procedure call. Then we will step into the procedure and, while doing so, have a look at the variable bindings table. Finally, we will navigate directly from the variable bindings table to the faulty procedure call and correct the parameter value.

  • Action Add a breakpoint to the 'Call procedure: Check price' node of the second test-case.
  • Run the second test-case again.
  • When QF-Test stops at the breakpoint step into the procedure via Step-In and watch the table of the variable bindings as you do so.
Variable stack
Figure 15.8:  Variable bindings stack showing incorrect value

As you step into the procedure, first the row 'Call procedure: Check price' and with the next step the row 'Procedure: Check price' appears at the top of the table.

Now the variable price shows up on two different levels of the variable bindings table: In the 'Call procedure' row and the 'Procedure: Check price' row on the fallback stack. Since we did not adapt the value of the parameter passed to the procedure, neither of the two values bound to the price variable is correct.

QF-Test lets you change the values of the variables interactively in the variable bindings table when you are in debugging mode. You can even add new variables or delete them. However, changes to variable values in the variable bindings table are not persistent. They only last as long as the variable is on the stack (variable bindings table), in our case, if we changed the price value, as long as the procedure is being executed.

The parameter value in the procedure call will not be altered by changing the current value of the variable in the variable bindings table. To do so you have to navigate to the 'Procedure call' node and change it there.

To get there quickly you just double-click the procedure call in the variable binding table (second row). This feature is particularly useful when debugging more complex tests where the node you want to jump to is not directly visible in the test-suite window. You can invoke it via right-clicking the row and selecting »Jump to node in test-suite« from the pop-up menu, too.

  • Action Double-click the second row with the procedure call in the variable bindings table.
  • Set the value of the parameter to the correct value, i.e. 26,100.00 €.

When checking the variable bindings table you will notice that the current value has not changed. This is hardly surprising as we have not yet executed the procedure call again. Only, test execution is already past the procedure call. Fortunately, QF-Test has another very useful debugging feature to set back (or forward) test execution to some node: »Continue execution from here«, which can be invoked either via the pop-up menu of the node you want to make the current node or by pressing [Ctrl-,] after selecting the node.

In order to try out the newly set value:

  • Action Right-click the 'Call procedure: checkFinalPrice' node of the second procedure.
  • Select 'Continue execution from here' in the popup menu.
Variable stack
Figure 15.9:  Continue Execution from here

When checking the variable bindings table you will find that the top two rows have disappeared. This is because now we exited the procedure (even though 'backwards') and therefore the procedure call and all its variable bindings was taken off the call stack.

  • Action Release the pause button Continue.

The test run should finish without error.

Note As the variable bindings table is very useful when looking for incorrect variable values you will also find a copy of it in the run-log whenever an error or exception is logged. It is written to the subnode 'Stack trace' of the node causing the error, showing the variable values at the time the error occurred.

Locate the current Node: Sometimes during debugging you will navigate far away from the current node where execution stopped and eventually want to get back to it again. The easiest way to do so is by pressing the "Locate Current Node" Locate Current Node button or select the »Debugger«-»Locate Current Node« menu option to cause the debugger to "select" the current node.