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


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

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-15 22:04 +0200
Organization news.netcologne.de
Message-ID <nmbfkk$sk4$1@newsreader4.netcologne.de> (permalink)
References <duo028Fb4qaU1@mid.individual.net> <nm8j8b$r9c$1@newsreader4.netcologne.de> <duqgrdFtso5U1@mid.individual.net>

Show all headers | View raw


Responding to Christian H. Kuhn:
> Am 14.07.2016 um 19:47 schrieb Patrick Roemer:
> Ich glaube verstanden zu haben: Wenn ich nicht System.nanoTime() nehme,
> sondern eine AbstractTime.getTime(), dann kann ich „in echt“ den 50
> ms-Takt zum Aktualisieren nehmen. Bei den Tests brauche ich keine
> Rücksicht auf Zeitabläufe zu nehmen, sondern setze die Zeiten so, wie
> ich sie brauche?

Genau. Naiv erst mal:

interface TimeSource {
  long getTimeInNanoSecs();
}

class ChessTimer {
  public ChessTimer(TimeSource timeSource) {
    // ...
  }
  // ...
}

class SystemTimeSource implements TimeSource {
  @override public long getTimeInNanoSecs() {
    return System.nanoSecs();
  }
}

...und für Tests dann sowas:

class ScriptedTimeSource implements TimeSource {
  private long time;

  @override public long getTimeInNanoSecs() {
    return time;
  }

  public void set(long time) {
    this.time = time;
  }
}

...oder ähnlich - kann man je nach Bedarf komplexer gestalten, mit
EasyMock "implementieren", was immer für den konkreten Test am
günstigsten ist.

Das ist aber nur die halbe Miete. Man würde dann auch den konkreten
j.u.Timer in der Kernklasse wegabstrahieren wollen. Dafür könnte man ein
eigenes Interface für die Funktionalität von j.u.Timer erstellen, usw.
Alternativ/zusätzlich könnte man das Design so ändern, dass der
ChessTimer nur eine Methode #checkFlag() hat, die von einem *externen*
Timer aufgerufen wird. Dann braucht man "weiter oben" natürlich wieder
eine Entität, die externen Timer und ChessTimer zusammenführt und muss
die separat testen - aber man hat die Verantwortlichkeiten getrennt und
die "Problemfläche" für Threading reduziert.

> Im Studium hatte ich Multi-Threading nur im ProPra, und der einzige
> wirkliche Lerneffekt war, dass der Datenfluss von einem Thread in den
> anderen EWIG dauert.

Dann war das ProPra für den Fuß. :)

> Threadsicherheit, Transaktionen etc. hab ich mal gehört, im Prinzip
> verstanden, aber noch keinen praktischen Kontakt gehabt. Schien mir hier
> auch nicht nötig. In der gegebenen Situation (Schach) werden auch geübte
> Spieler nicht mehr als 2 Züge pro Sekunde machen. Bei einem 50ms-Takt
> passiert da nichts gravierendes. notifyObserver() überträgt immer nur
> die aktuellen Änderungen, und aufeinanderfolgende Aufrufe werden da
> keine vom Spieler wahrnehmbaren Störeffekte erzeugen.

Es ist völlig egal, welche Frequenz die Aufrufe in den einzelnen Threads
haben. Solange es keine "happens-before"-Beziehung zwischen Aktion A in
Thread 1 und Aktion B in Thread 2 gibt, hast Du keinerlei Garantie, dass
Thread 2 die Resultate von Aktion A je sehen wird, egal, wieviel
Realzeit zwischen den Aktionen liegt.

> Wobei ich denke, dass der TimerTask in QChessTimer unproblematisch ist.

Ist er nicht. #flagFallen müsste mindestens volatile sein, da von
mehreren Threads drauf zugegriffen wird.

> Wie das externe Setzen von GUI-Bestandteilen in den EDT rein soll,
> erschließt sich mir noch nicht.

Über SwingUtilities#invokeLater().

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