Wie Junit mit Netbeans 8.1 verwenden ?

ernst

Top Contributor
Hallo allerseits
ich will etwas mit Tests in Java (Junit) experimentieren bzw. ausprobieren.
Habe deshalb das folgende syntaktische korrekte Java-Programm (in Netbeans 8.1) geschrieben, (ein Demoprogramm) das Junit verwendet (Compiler meldet keine Fehler).
Vorher habe ich junit-4.10.jar runtergeladen und in mein Projekt eingebunden:
Rechte Maustaste auf das aktuelle Projekt -->
Properties -->
Libraries -->
Add Jar/Folder -->
Die folgende Datei junit-4.10.jar anklicken.

Frage:
wie kann man den Test starten bzw. wie nutzt man Junit am Besten ?
Habe schon gelesen, daß man ein Junit-Plugin einbinden kann.
Das geht bei mir nicht.

mfg
ernie




============================
Java:
package demo1junit;
import static org.junit.Assert.*;
import org.junit.Test;

public class Startklasse {

    public static void main(String[] args) {

    }
  
}

class StringUtilsTest
{
@Test
public void testReverse()
{
 assertEquals( "", StringUtils.reverse( "" ) );
 assertEquals( "cba", StringUtils.reverse( "abc" ) );
}
}

class StringUtils
{
 public static String reverse( String string )
 {
  return null;
 }
}
 
Zuletzt bearbeitet von einem Moderator:

ernst

Top Contributor
Danke für diese Infos.
Habe wie empfohlen mit Alt + F6 den Test gestartet (bzw. mit RM + Test)
Dann erschien die Ausgabe unten.
Müsste es bei
assertEquals( "cba", StringUtils.reverse( "abc" ) );
nicht eine Fehlermeldung bringen, da
StringUtils.reverse( "abc" )
null zurückgibt, aber im Test:
assertEquals( "cba", StringUtils.reverse( "abc" ) );
"abc"
erwartet wird ?

Code:
====================================
ant -f D:\\Daten_Austausch_1_7_18\\MEINE_SKRIPTE\\ProgJava\\28_Junit\\demo1Junit -Dnb.internal.action.name=test -Dignore.failing.tests=true -Dnb.wait.for.caches=true test
init:
deps-jar:
Updating property file: D:\Daten_Austausch_1_7_18\MEINE_SKRIPTE\ProgJava\28_Junit\demo1Junit\build\built-jar.properties
compile:
compile-test:
test-report:
test:
BUILD SUCCESSFUL (total time: 0 seconds)
====================================

mfg
ernie
 
Zuletzt bearbeitet von einem Moderator:

httpdigest

Top Contributor
Müsste es bei assertEquals( "cba", StringUtils.reverse( "abc" ) ); nicht eine Fehlermeldung bringen, da StringUtils.reverse( "abc" ) null zurückgibt
Wieso sollte StringUtils.reverse() null zurückliefern und nicht eher tatsächlich den umgekehrten String??
Ob der Test richtig ausgeführt wird, kannst du ganz ganz einfach mit assertTrue(false); ausprobieren.
 

httpdigest

Top Contributor
Bist du sicher, dass er tatsächlich in dem Test dieses StringUtils verwendet, und nicht ein anderes? Schau mal in die Imports des Tests, ob da ein anderes StringUtils importiert wird.
 

httpdigest

Top Contributor
Und generell ist es keine gute Idee, einen Unit Test zusammen mit anderen Klassen in derselben Compilation Unit (Quelldatei) zu haben, insbesondere da ja die Quelldatei so heißen muss, wie die einzige public class in der Datei, also bei dir Startklasse.java.
Ich denke mal, dass Netbeans den Test gar nicht identifiziert bekommt. In Eclipse funktioniert solch eine Konstellation (Test als package-protected Klasse zusammen mit der public Hauptklasse in einer Compilation Unit) übrigens auch nicht.
Separiere deine Testklasse als eigenständige Datei.
 

mihe7

Top Contributor
Ob und warum StringUtils nicht null zurückliefert, weiß ich nicht. Vielleicht nimmt er ein anderes her, vielleicht wird sein Test nicht ausgeführt. Klar ist nur die Erwartung, dass es null zurückliefern sollte, weil er es eben so programmiert hat :)
 

ernst

Top Contributor
Deinem Einwand folgend habe ich einige Namen des Quellcode abgändert:

Java:
package demo1junit;
import static org.junit.Assert.*;
import org.junit.Test;

public class Startklasse {
    public static void main(String[] args) {
    }
}

class MeinTest{
  @Test
  public void testReverse(){
    assertEquals( "", MeineStrings.reverse( "" ) );
    assertEquals( "cba", MeineStrings.reverse( "abc" ) );
  }
}

class MeineStrings{
  public static String reverse( String string ){
    return null;
  }
}

bekomme aber immer noch keinen Fehlermeldung:
Code:
ant -f D:\\Daten_Austausch_1_7_18\\MEINE_SKRIPTE\\ProgJava\\28_Junit\\demo1Junit -Dnb.internal.action.name=test -Dignore.failing.tests=true -Dnb.wait.for.caches=true test
init:
Deleting: D:\Daten_Austausch_1_7_18\MEINE_SKRIPTE\ProgJava\28_Junit\demo1Junit\build\built-jar.properties
deps-jar:
Updating property file: D:\Daten_Austausch_1_7_18\MEINE_SKRIPTE\ProgJava\28_Junit\demo1Junit\build\built-jar.properties
compile:
compile-test:
test-report:
test:
BUILD SUCCESSFUL (total time: 0 seconds)

mfg
ernie
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
Der Code dürfte doch nicht einmal kompilieren: die Annotation heißt
Java:
@Test
, nicht
Java:
@test
(außer, ich habe was verpasst :))

EDIT: ah, liegt am Foreneditor -> User wird zugeordnet.

EDIT2: Gibt es hier irgendeinen Trick?
 

ernst

Top Contributor
...
Separiere deine Testklasse als eigenständige Datei.

Habe den folgenden Text:
Java:
class MeinTest {
    @Test
    public void testReverse() {
        assertEquals("", MeineStrings.reverse(""));
        assertEquals("cba", MeineStrings.reverse("abc"));
    }
}

in eine eigene Datei separiert, so dass das package
demojunit
aus den 2 Dateien:
Startklasse.java
MeinTest.java
besteht.
Es gibt aber immer noch keine Fehlermeldung!

mfg
ernie
 
Zuletzt bearbeitet von einem Moderator:

ernst

Top Contributor
Du musst die Test-Klasse eventuell als public markieren.
Habe ich gemacht.
Es ändert sich aber nichts:
Code:
ant -f D:\\Daten_Austausch_1_7_18\\MEINE_SKRIPTE\\ProgJava\\28_Junit\\demo1Junit -Dnb.internal.action.name=test -Dignore.failing.tests=true -Dnb.wait.for.caches=true test
init:
deps-jar:
Updating property file: D:\Daten_Austausch_1_7_18\MEINE_SKRIPTE\ProgJava\28_Junit\demo1Junit\build\built-jar.properties
compile:
compile-test:
test-report:
test:
BUILD SUCCESSFUL (total time: 0 seconds)
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
In NetBeans JUnit zu verwenden, ist ja nun wirklich nicht das Problem. Du schreibst eine Klasse, die Du testen möchtest. Dann machst einen Rechtsklick auf der dazugehörigen Datei, im Kontextmenü wählst Du Tools -> Create Tests, wählst ggf. noch die JUnit-Version und das wars.

Wenn das Zeug einmal eingerichtet ist, kannst Du im Projektbaum in den Test-Quellen einfach weitere Testklassen hinzufügen (oder Du wendest obiges Verfahren an).

S. dazu auch https://netbeans.org/kb/docs/java/junit-intro.html
 

mrBrown

Super-Moderator
Mitarbeiter
Und generell ist es keine gute Idee, einen Unit Test zusammen mit anderen Klassen in derselben Compilation Unit (Quelldatei) zu haben, insbesondere da ja die Quelldatei so heißen muss, wie die einzige public class in der Datei, also bei dir Startklasse.java.
Zumindest bei TDD ist es durchaus normal, erstmal nur die Testklasse und in der sowohl Test als auch den zu testenden Code zu haben ;)
 

mihe7

Top Contributor
@mrBrown ja. Dazwischen hatte ich es mit icode-Tags probiert, ging leider auch nicht. Und dann kam natürlich die Frage auf, ob man hier nichts Escapen kann :)
 

ernst

Top Contributor
In NetBeans JUnit zu verwenden, ist ja nun wirklich nicht das Problem.
Du schreibst eine Klasse, die Du testen möchtest. Dann machst einen Rechtsklick auf der dazugehörigen Datei, im Kontextmenü wählst Du Tools -> Create Tests, wählst ggf. noch die JUnit-Version und das wars.
Wenn das Zeug einmal eingerichtet ist, kannst Du im Projektbaum in den Test-Quellen einfach weitere Testklassen hinzufügen (oder Du wendest obiges Verfahren an).
S. dazu auch https://netbeans.org/kb/docs/java/junit-intro.html
Es ist für mich ein Problem!
1)
Mit
Tools -> Create Tests,
wird mir Software erstellt. Das will ich nicht.
Ich will meine eigenen Tests schreiben, wie in meinem kleinen Beispiel in meinem Posting.
Aber das funktioniert nicht.

2)
Ich will, dass die folgende Anweisung:
assertEquals("cba", MeineStrings.reverse("abc"));
einen Fehler produziert.
Das funktioniert aber nicht

3)
Was mache ich falsch ?

mfg
ernie


2)
 

mrBrown

Super-Moderator
Mitarbeiter
1)
Mit
Tools -> Create Tests,
wird mir Software erstellt. Das will ich nicht.
Ich will meine eigenen Tests schreiben, wie in meinem kleinen Beispiel in meinem Posting.
Aber das funktioniert nicht.
Keine Ahnung was du mit "Software erstellt" meinst, aber Create Tests erzeugt nur den Klassen-Rahmen und richtet das Projekt entsprechend ein, die Tests musst du schon noch selber schreiben.
 

ernst

Top Contributor
Damit soll auch nur sichergestellt werden, dass das Projekt korrekt eingerichtet wird. Die Testklasse, die hier erstellt wird, kannst Du hinterher löschen. Du kannst Deine eigenen Klassen schreiben, wie Du willst.
Habe den ganzen (alles) von Netbeans erzeugten Code gelöscht (so wie du es gesagt hast) und meinen Testcode reingeschrieben.
Dann erscheint u.a. die Meldung:
============================
...
Testsuite: demojunit10.MeinTestTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
Null Test: Caused an ERROR
...
=================================

mfg
ernie
 

Neumi5694

Top Contributor
[...]Ich will meine eigenen Tests schreiben, [...]
Und was hält dich davon ab?

Hasst du denn schon mal geschaut, was der Menüpunkt eigentlich macht?
Er erstellt dir eine Beispielklasse mit eine paar Methoden, die im Grunde gar nichts machen, die sind nur dazu da, damit du was hast, nach dem du dich richten kannst, wie z.B. eine Methode, die vor allen Tests ausgeführt werden soll oder einer, die nach allen Tests ausgeführt werden soll.

In dieser Klasse schreibst du nun deine eigenen JUnit-Tests.
Diese sind public-Methoden ohne Parameter, davor schreibst du noch
Code:
"@Test"
, damit sie auch ausgeführt werden.
Die Test-Klasse muss weder gleich heißen wie die zu testende Klasse (Netbeans nennd sie standardmäßig "KlassenNameIT"), noch muss sie im gleichen Package liegen. Letzteres ist aber zu empfehlen, wenn du package protected methoden testen willst.

Und wenn dir das immer noch nicht passt, dann leg halt deine eigene leere Klasse an und pack die Test-Methoden da rein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JUnit Plug'in Tests Plattformprogrammierung 18
N Junit Plug-In Test Plattformprogrammierung 13
I OSGi JUnit Plug'in Tests von deklarativen Services Plattformprogrammierung 5
D Plugin - JUnit - Tests aus einem anderen Projekt ausführen Plattformprogrammierung 7
M JUnit 4.3.1 aus eclipse plugins durch junit 4.4 ersetzen Plattformprogrammierung 2
M Plugin JUnit Test Plattformprogrammierung 4
E Probleme mit Netbeans und javaDoc Plattformprogrammierung 6
C Bibliothek in Netbeans einbinden mit Graphi als Platform Plattformprogrammierung 1
C Es lässt sich kein Projekt in Netbeans anlegen Plattformprogrammierung 2
S Wie lauffähige .jar-Datei mit Netbeans für Java3D Anwendung erstellen? Plattformprogrammierung 8
B RCP Netbeans Versionen Plattformprogrammierung 4
T netbeans problem? Plattformprogrammierung 4
Kr0e Allgemeine NetBeans Platform Module Frage Plattformprogrammierung 13
lenniii Netbeans Debugger Plattformprogrammierung 6
J ein paar allgemeine Fragen zu Eclipse und NetBeans RCP Plattformprogrammierung 9
M Eclipse RPC, Netbeans, RPC Plattformprogrammierung 17
S Bean will nicht in netbeans Plattformprogrammierung 2
G Netbeans RPC vs Programmierung per Hand - Vor- und Nachteile Plattformprogrammierung 10
N OSGI in Netbeans? Plattformprogrammierung 5
dzim OSGi Problem beim Verwenden von Declaratice Services Plattformprogrammierung 18
A OSGi Plugin als Service exportieren und verwenden Plattformprogrammierung 12
M RCP Ein Command in mehreren Plugins verwenden? Plattformprogrammierung 12
dzim Verwenden interner Jars/Resourcen Plattformprogrammierung 10
H Bibliotheken in Eclipse-Plugin-Projekt verwenden. Plattformprogrammierung 18
dzim EditorInputs richtig verwenden Plattformprogrammierung 5

Ähnliche Java Themen


Oben