JUnit ist das neue main()

G

gman

Gast
Hallo zusammen,

in letzter Zeit haben wieder viele Java-Anfänger Probleme mit der main()-Methode und dem
Aufruf von eigenen (nicht statischen) Methoden gehabt.

Äh, ja. Und wo ist jetzt die Verbindung zum Thread-Titel?

Naja, man könnte den Anfängern ja mal raten den eigenen Code sofort mit JUnit zu testen.
Dann können sie erstmal die eigenen Klassen enwerfen und haben viel mehr Möglichkeiten
den eigenen Code zu testen.
Mir ist halt aufgefallen das bis jetzt noch niemand das aus dieser Richtung gesehen hat, oder
ich habe es nicht mitbekommen :)

Nachteile der main()-Methode:

- Java-Anfänger haben idR. genug mit OOP und Klassen zu tun, dann muss man sie nicht auch
noch mit diesem komischen static-Kram belästigen
- gerade die Sache mit static führt öfters mal zu komischen Programmen

Vorteile durch JUnit:

- Java-Anfänger können sich erstmal auf ihre Klassen konzentrieren
- Gewöhnen sich sofort an ihren Code zu testen (ich weiß, Wunschvorstellung)

Was haltet ihr von dieser Sichtweise/These/Wasauchimmer
 

Landei

Top Contributor
Anfänger müssen verstehen, was "static" bedeutet - warum dann nicht bei main anfangen? Ohne "static" zu kennen, bleiben Aufrufe wie System.out.println, System.exit oder Arrays.toString unverständlich und mysteriös, und Dinge wie Enums können nicht einleuchtend erklärt werden. Auf der anderen Seite ist es nun nicht sooo schwer zu erklären, dass manche Sachen eben an der Klasse und nicht an der Instanz hängen.
 

Noctarius

Top Contributor
Static gehört aber zum Klassen-Kram. Statische Methoden sind Klassenmethoden.
Zu deiner Idee: Bring einem Anfänger mal bei warum er eine Klasse ableiten muss um sie zu starten, bzw was Annotations sind ;) Abgesehen davon muss man JUnit Tests auf Konsole ganz anders starten, dann muss man sich plötzlich schon mit Classpaths rumschlagen und hat noch nicht mal verstanden wie Java funktioniert.

Generell könnte man bestimmt eine Vereinfachung basteln, quasi ein Basisframework zum Starten von Klassen.
[c]java Start HelloWorld[/c]

Damit könnte z.B. automatisch die Klasse HelloWorld.class nachgeladen werden und dann einfach instanziert werden, aber ob ein Konstruktor einfacher ist als eine statische main-Methode. Ich glaube fast nicht.
 
M

maki

Gast
Was haltet ihr von dieser Sichtweise/These/Wasauchimmer
IMHO ist das Problem dass man dann einem Anfänger beibringen muss, eine Jar in den CP aufzunehmen, oder gar gleich noch Mockobjekte zu den Unittests nachlegen müsste, dass wäre etwas viel des guten.
 

Empire Phoenix

Top Contributor
Frag mal meine mitstudenten ^^
Wir hatten da mal eine Aufgabe mit JUnit, die wir abgeben sollten.
(Und jetzt versuch mal JUnit über die console sauber zu starten)
In meiner not habe ich selber einen kleinen Hack in der main gehabt, der die JUnit sch... selber aufruft.

(Meiner meinung is JUnit ausserhalb von Algorithmen testen fehl am platze, zumal es auf lange Sicht ja doch ncihts bringt vor dem Problem wechzurennen)
Wenn du es ihenen einfacher Machen willst/ motiviren willst würde ich Greenfoot empfehlen dann sehen die wenigstens was. (Ausserdem können sie alle Methoden manuell aufrufen wenn nötig erstmal)
 
M

maki

Gast
Frag mal meine mitstudenten ^^
Wir hatten da mal eine Aufgabe mit JUnit, die wir abgeben sollten.
(Und jetzt versuch mal JUnit über die console sauber zu starten)
In meiner not habe ich selber einen kleinen Hack in der main gehabt, der die JUnit sch... selber aufruft.
.. was genau ist denn das Problem mit "JUnit von der Konsole" zu starten?
Classpath setzen?
 
G

gman

Gast
Danke für eure Kommentare, ich denke ich muss die Zielgruppe wohl mal anpassen:

Ich meinte eigentlich die Leute die Code ausprobieren wollen und sich dafür ne Klasse mit main()-Methode
anlegen, in der Klasse alle Methoden (statisch natürlich) reinschreiben und wenn alles läuft den Code
nochmal in eine "richtige" Klasse packen.
Oder eine andere Variante: Man hat eine Klasse mit einer main()-Methode und darin werden Methoden
aufgerufen die was bestimmtes Testen und die Tests/Methoden die nicht ausgeführt werden sollen werden
(in der main()-Methode) auskommentiert. So entsteht eine Klasse in der die verschiedensten Sachen
drin stehen von dem das meiste nicht benutzt wird. Ich gebe zu das ich in meiner Anfangszeit sowas
mal gemacht habe und relativ gut fand.

Mein Punkt war jetzt eigentlich nur: Man kann Leute viel besser von JUnit überzeugen wenn man ihnen
zeigt das man seinen Code damit ganz einfach testen kann. Für manche ist es ja eher so das sie es
benutzen "müssen". Der Titel war nur so großkotzig gewählt damit die Resonanz größer wird ;-)
 

Landei

Top Contributor
Es gibt ja einen Grund, warum viele Leute Test-Frameworks nicht mögen: Sie sind zu starr, unintuitiv und schwer zu lesen. Um die Akzeptanz zu verbessern, muss noch einiges getan werden.

Der folgende Vergleich ist etwas unfair, da in Java die Möglichkeiten für DSLs ziemlich eingeschränkt sind (was sich mit Closures etwas bessern würde), aber ein Test-Framework, das wirklich Spaß macht, würde ich mir ähnlich wie ScalaTest vorstellen:

Code:
import org.scalatest.FlatSpec
import org.scalatest.matchers.ShouldMatchers

class StackSpec extends FlatSpec with ShouldMatchers {

  "A Stack" should "pop values in last-in-first-out order" in {
    val stack = new Stack[Int]
    stack.push(1)
    stack.push(2)
    stack.pop() should equal (2)
    stack.pop() should equal (1)
  }

  it should "throw NoSuchElementException if an empty stack is popped" in {
    val emptyStack = new Stack[String]
    evaluating { emptyStack.pop() } should produce [NoSuchElementException]
  }
}
 
M

maki

Gast
@gman

Das nennt sich "Learning Tests"

@Landei
Zu sagen dass Java Unittests schwer zu lesen sind und dann Scala als "gutes" Beispiel zu bringen ist irgendwie seltsam ;)
 

Landei

Top Contributor
Entschuldigung, aber wie soll ich ein Beispiel für ein gutes Test-Framework in Java bringen, wenn es (meiner Meinung nach) keins gibt? Das Scala-Beispiel war halt das nächstbeste verfügbare (ich weiß z.B., dass Ruby etwas ganz ähnliches hat, aber da kenne ich mich eben nicht aus). Wenn ihr das nicht lesbarer und bequemer als JUnit mit seinen lustigen Annotations und assertEqualsSonstwies findet, kann ich das natürlich nicht ändern (wobei so ein kurzes Beispiel sowieso nur an der Oberfläche kratzt). Übrigens habe ich von einigen Firmen gehört, die zwar alles in Java programmieren, ihre Tests aber in Scala schreiben - warum wohl?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
ungünstige Vorlage:
weil Scala eine Skriptsprache ist, genauso gut könnte man in Txt/ XML tausende Methodennamen + erwartere Werte auflisten,
das Framework, das das dann ausführt, sieht man nicht, ist besser in anderer Sprache programmiert
Skriptsprache ? Wikipedia
:cool:
 
S

SlaterB

Gast
sicher sicher, nur die Tendenz und weil es so gut passte (Programm in Java, simple Tests in Scala)
 

Landei

Top Contributor
weil Scala eine Skriptsprache ist
...
Skriptsprache ? Wikipedia
:cool:

Dort steht:
Merkmale

Häufig vorhandene Merkmale sind:

* implizit deklarierte Variablen; dazu gehören auch dynamische Funktionsnamen
Nein.
* dynamische Typisierung
Nein.
* automatische Speicherverwaltung, vor allem automatische Speicherbereinigung
Ja, hat Java aber auch
* dynamische Klassenzugehörigkeit oder prototypenbasierte Vererbung
Nein.
* werden in der Regel ohne getrennte Übersetzungsphase ausgeführt (d. h. sie werden interpretiert)
Jain, wie Java auch
Bei einigen Skriptsprachen kann der Programmcode selbst, wie andere Daten auch, manipuliert werden, was die Sprache besonders flexibel macht.
Nein.

Dadurch dass man häufiger wiederholt, dass Scala eine Scriptsprache ist, wird es nicht wahrer.
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
Leute, das ist Scala-Thread hier!

Die Posts #9, #10->#17 haben nichts mit dem Thema zu tun (und ob Scala eine Scriptsprache ist oder nicht, hat mal absolut garnichts mit dem Thema hier zu tun!!!). Also back to topic.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W junit.Test not accessible? Java Basics - Anfänger-Themen 4
6 Best Practice Feedback zu Service / JUnit Tests Java Basics - Anfänger-Themen 3
M Anfängerfehler - Tests JUnit IntelliJ Java Basics - Anfänger-Themen 24
D Cannot find JUnit.framework Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
U JUnit testen auf SomeException Java Basics - Anfänger-Themen 5
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
A JUnit testing is inkonsistent Java Basics - Anfänger-Themen 12
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
A Test Junit Java Basics - Anfänger-Themen 1
H Junit test Java Basics - Anfänger-Themen 12
P Methoden JUnit 4 - Test Java Basics - Anfänger-Themen 6
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
W JUnit Tests Java Basics - Anfänger-Themen 4
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
L JUnit tests in java Java Basics - Anfänger-Themen 5
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
F JUnit - Was ist mit "side effects" gemeint ? Java Basics - Anfänger-Themen 2
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
L Junit Testing bei XML? Java Basics - Anfänger-Themen 3
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
O JUnit - Objektreferenzen Java Basics - Anfänger-Themen 3
G Testen mit JUnit Java Basics - Anfänger-Themen 4
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
S Junit Test Java Basics - Anfänger-Themen 2
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
L Junit Tests Java Basics - Anfänger-Themen 10
A IllegalArgumentException in JUnit testen Java Basics - Anfänger-Themen 3
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
V JUnit Klassen Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
Z JUnit Exception Java Basics - Anfänger-Themen 2
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
M Ist die Hamcrest Bibliothek auch schon in Junit 4.11 verfügbar? Java Basics - Anfänger-Themen 1
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
M Reihenfolge von Testmethoden in JUnit beeinflussen Java Basics - Anfänger-Themen 2
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
G JUnit-Tests im Programmdurchlauf starten Java Basics - Anfänger-Themen 4
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
T JUnit test failed Java Basics - Anfänger-Themen 3
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
T Junit in Eclipse Java Basics - Anfänger-Themen 1
P JUnit bedeutungen Java Basics - Anfänger-Themen 3
R JUnit Test mit einer Dateistruktur als Testparameter Java Basics - Anfänger-Themen 3
shiroX OOP Array kleinste Zahl mit jUnit test Java Basics - Anfänger-Themen 3
S JUnit assertEquals funktioniert nichgt wie es sollte :( Java Basics - Anfänger-Themen 7
V Frage zu JUnit Tests Java Basics - Anfänger-Themen 3
B JUnit für JFileChooser Java Basics - Anfänger-Themen 6
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
S File vergleich - Junit Java Basics - Anfänger-Themen 6
T JUnit Java Basics - Anfänger-Themen 18
G Junit Java Basics - Anfänger-Themen 4
X JUnit testing Java Basics - Anfänger-Themen 7
T JUnit Suite frage Java Basics - Anfänger-Themen 6
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
S InvocationTargetException bei JUnit Testlauf Java Basics - Anfänger-Themen 2
B JUnit - Mini-Test Java Basics - Anfänger-Themen 9
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
Y Junit Test - Testwert ändert sich Java Basics - Anfänger-Themen 12
T Junit --Exception testen Java Basics - Anfänger-Themen 15
A JUnit Tests in Jar-Archiv packen Java Basics - Anfänger-Themen 2
G Erste Schritte JUNIT Regressionstests automatisieren Java Basics - Anfänger-Themen 2
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
M JUnit - nur Failures loggen? Java Basics - Anfänger-Themen 2
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
R String Replace für JUnit Java Basics - Anfänger-Themen 19
T JUNIT Nullpointerexception Java Basics - Anfänger-Themen 3
M JUNIT tests mit ant script ausführen Java Basics - Anfänger-Themen 4
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
S [JUnit] Print Results while running Java Basics - Anfänger-Themen 6
W Mit jUnit Array testen? Java Basics - Anfänger-Themen 5
T Junit Tests Java Basics - Anfänger-Themen 7
I JUnit Datapoints für mehrere Testklassen Java Basics - Anfänger-Themen 4
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
T brauche HILFE beim Junit test:eek: Java Basics - Anfänger-Themen 11
M Junit tests gehen nicht Java Basics - Anfänger-Themen 2
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
L JUNIT Testing Java Basics - Anfänger-Themen 3
C jUnit: Erfahren, ob der getestete Code eine Exception gehandelt hat Java Basics - Anfänger-Themen 3
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23

Ähnliche Java Themen

Neue Themen


Oben