Skip to end of metadata
Go to start of metadata

How to reduce the impact on testability incurred by generated GUI code

When creating a Graphical User Interface (GUI) in Java it is common to use GUI builder tools like e.g. Matisse. These tools generate code that is difficult to change and debug without the tool and (afaik) impossible to test. To improve testability is it recommended to use the GUI builder only for the actual layout and such. Everything that even remotely resemble logic (yes, also view logic) can be split out to a separate controller. (This will give an extra "controller" in addition to the controller for the MVC pattern.)

Presentation Logic Controller

The MVC-controller has a reference to the data model and references to one or more Presentation Logic Controllers (PLC). Each PLC use a bindingSource to fetch data from an entity. The PLC is given the responsibility of handling presentation logic (e.g. enabling/disabling buttons). The PLC is appropriate when the GUI has a complex relationship with the data model.

Is this the same as has been described in Decoupling presentation logic with MVP ?

Could you have solved the same problem with Blackboard ? (The various GUI-elements that read and write the same data (spread across different data objects) can work on a Blackboard.

Roadmap for Windows Forms data binding

Fixtures for Easy Software Testing (FEST)

Using Abbot and TestNG to test Swing GUI.

FEST home page

FEST project at Google Code
Article Test-driven GUI development with FEST by Alex Ruiz
Test-Driven GUI Development with TestNG and Abbot

Resources

Labels:
None
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. Feb 25, 2008

    Arne:
    tja patternet reduserer jo ikke outputtet fra feks designeren i Windows Forms. Designeren gjør jo sine ting uansett. Det som kraftig reduseres er mengden kode utvikleren vanligvis skriver for å håndtere presentasjonslogikk som feks enabling/disabling av kontroller eller det å feks skjule/vise deler av GUIet. Slik kode blir ofte meget kompleks og gjør koblingen mellom view og modell veldig tett. Det som gjør at dette fungerer virkelig bra i Windows Forms/WPF er databinding, noe som jeg ikke vet om finnes i Java-verden. Men det skulle vel være mulig å kode seg rundt det på et vis. Databinding er en mekanisme som gjør at et view oppdaterer seg basert på endringer i modellen. Ang testbarhet så gjør patternet det mulig å skrive vanlige unittester for hver enkelt presentasjonsregel, noe som er veldig nyttig.

  2. Feb 25, 2008

    Arne:
    Ikke så enormt bra eksempel men:

    http://wiki.objectware.no/display/net/Windows+Presentation+Foundation

    pakk ut koden fra "fagkveld 21.1"

    I folderen "ViewModel" finner du et eksempel på en slik presentasjonsregelklasse. Kanskje litt vanskelig å skjønne hvordan det henger sammen bare med å se på den klassen der, men prinsippet er i alle fall klart nok, at man bør skille ut presentasjonsregler fra selve viewet.