Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #12989

Re: JUnit Test von JButton: Action wird nicht erkannt

From Patrick Roemer <sangamon@netcologne.de>
Newsgroups de.comp.lang.java
Subject Re: JUnit Test von JButton: Action wird nicht erkannt
Date 2016-07-14 19:47 +0200
Organization news.netcologne.de
Message-ID <nm8j8b$r9c$1@newsreader4.netcologne.de> (permalink)
References <duo028Fb4qaU1@mid.individual.net>

Show all headers | View raw


Responding to Christian H. Kuhn:
> Vollständiger Code auf https://www.qno.de/gitweb/, Branch v0.8.4.

Vielleicht bin ich nur zu doof, aber ich sehe in diesem Interface keinen
Weg, das ganze Projekt einfach auszuchecken. Falls es das nicht gibt,
wäre ein Link auf ein Zip oder, noch besser, ein clone des Repos auf
github o.ä., sinnvoller.

Was auf den ersten Blick auffällt: "Echtzeit" (System.nanoTime(),
java.util.Timer, etc.) in den Kernklassen hart zu verdrahten, ist schon
wegen der Tests nicht so der Knüller - die brauchen ja jetzt schon ewig...

Ich würde das in irgendeine TimeSource-Abstraktion auslagern, die man in
den Tests mit gescripteten Zeitwerten/-events mocken kann. Das mag die
Sache durchaus etwas komplexer machen, ist aber IMHO "essential
complexity" - Zeit ist nun mal nicht einfach. :) Ich würde erwarten,
dass eine solche Umstellung das Design - unabhängig von den Tests -
letztendlich verbessert, weil die Abhängigkeiten vom Zeitverlauf dadurch
klarer ersichtlich werden sollten und man Threading (s.u.) besser
wegkapseln kann.

> public class QChessClockJavaAV extends JFrame implements
> QChessClockObserver, ActionListener {

Statt die komplette Eventlogik in einem einzigen ActionListener zu
dispatchen, würde ich jedem Widget (bzw. deren Models) einen eigenen
(ggfs. anonymen) ActionListener spendieren, bevorzugt in Form einer
javax.swing.Action.

> resetButton.doClick() löst keine Aktion aus, oder zumindest wird sie
> nicht von actionPerformed() in QChessClockJavaAV aufgefangen.

Dass das an resetButton.isEnabled() == false liegt, hast Du ja schon
selber herausgefunden. Sowas ist übrigens genau die Art von Logik, die
man in einer State Machine in einem Presentation Model kapseln und
unabhängig vom UI-Framework testen kann. :) Die Widgets (bzw. deren
Models) würden dann einfach mit den Events aus dem PM verdrahtet.

Ansonsten hast Du auf jeden Fall noch ein Threading-Problem. Sowohl der
Test (main-Thread) als auch das Kernmodell (Timer-Threads) werkeln
direkt auf dem UI-Zustand rum. Das muss alles über den Swing-EDT laufen.

Das ist kein rein akademisches Problem! Wenn ich im Debugger etwas mit
Breakpoints und Timings rumkaspere, schaffe ich es z.B., diesen Testfall
(natürlich nichtdeterministisch und nur selten) grün laufen zu lassen -
weil das Deaktivieren des Reset-Buttons noch nicht im EDT "angekommen"
ist und auch die stop-Action "untergeht". Das sieht dann etwa so aus:

<snip>
new state: NOT_STARTED
thread: main
from: QChessClock.addObserver(QChessClock.java:196)

new state: NOT_STARTED
thread: Timer-2
from: QChessClock$1.run(QChessClock.java:48)

new state: RUNNING
thread: main
from: QChessClock.leftPressed(QChessClock.java:78)

new state: NOT_STARTED
thread: main
from: QChessClock.resetPressed(QChessClock.java:136)
</snip>

Viele Grüße,
Patrick

Back to de.comp.lang.java | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-14 01:09 +0200
  Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-14 18:26 +0200
  Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-14 19:47 +0200
    Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 00:08 +0200
      Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 22:04 +0200
        Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 22:53 +0200
        Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 23:09 +0200
          Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 23:44 +0200
            Countdown Timer Design (was: JUnit Test von JButton: Action wird nicht erkannt) "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 23:44 +0200
              Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 12:44 +0200
              Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 15:49 +0200
                Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 17:03 +0200
                Re: Countdown Timer Design "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 15:59 +0200
        Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 14:59 +0200
          Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 16:06 +0200
          Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-19 18:59 +0200
            Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-19 22:35 +0200
              Re: JUnit Test von JButton: Action wird nicht erkannt Patrick Roemer <sangamon@netcologne.de> - 2016-07-20 13:00 +0200
                Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-23 20:36 +0200
                Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-23 23:15 +0200
          Re: JUnit Test von JButton: Action wird nicht erkannt Wanja Gayk <brixomatic@yahoo.com> - 2016-07-19 23:02 +0200
            Re: JUnit Test von JButton: Action wird nicht erkannt "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-20 12:33 +0200
    GUI-Update über Swing-EDT (was: JUnit Test von JButton: Action wird nicht erkannt) "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 12:03 +0200
      Re: GUI-Update über Swing-EDT Patrick Roemer <sangamon@netcologne.de> - 2016-07-15 22:43 +0200
        Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-15 23:18 +0200
        Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 15:24 +0200
          Re: GUI-Update über Swing-EDT Patrick Roemer <sangamon@netcologne.de> - 2016-07-16 16:42 +0200
            Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-16 23:05 +0200
              Re: GUI-Update über Swing-EDT "Christian H. Kuhn" <qno-news@qno.de> - 2016-07-17 16:02 +0200

csiph-web