Junit Tests

Wie kann ich eine set Methode mit Junit Testen?!


private String name;

public void setName(String name){
     this.name = name;
}

public String getName(){
   return name;
}

wie kann ich die setMethode davon testen?

Indem du dir eine Testklasse schreibst und diese ruft die Methode auf.

die Testklasse hab ich

aber wie genau muss ich die Methode aufrufen ?

naja sowas in der Art

static import org.junit.Assert.*
public class Test{
@Test
public void testSet()
{
  Klasse ob = new Klasse();
  ob.setName("abc");
  assertEquals(ob.getName(),"abc");
}
}

Die Klasse ist jetzt einfach so ausm Kopf geschrieben weiß nicht genau ob die Import klappen und so.

hab meine Methoden erst in meiner Main getestet.

die Methode take(Zutat zutat)

entnimmt eine Zutate aus meinem Lager (bzw. reduziert die Menge)

woran kann es liegen dass es in der Main Methode funktioniert aber der junit test fehl schlägt?

Junit test sieht so aus:


public void testTake(){
     assertEquals(1000, wasser.getQuantity());
     bar.take(wasser, 100);

     // soweit klappt es auch 

     assertEquals(900, wasser.getQuantity()); // Fehler
}

sieh dir den Stacktrace an, da müsste drin stehen was erwartet wurde und was gekommen ist.

und was sagt mir die:

junit.framework.AssertionFailedError: expected:<900> but was:<1000>
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.failNotEquals(Assert.java:280)
at junit.framework.Assert.assertEquals(Assert.java:64)
at junit.framework.Assert.assertEquals(Assert.java:198)
at junit.framework.Assert.assertEquals(Assert.java:204)
at co.cktail.bar.BarTest.testTake(BarTest.java:130)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

Da siehst du das dein Take nicht funktioniert oder vorher mehr als 1000 drin waren, weil 900 waren erwartet aber 1000 kamen raus.

kann man auch methoden testen

die einen Text in eine .txt datei schreiben?

Testen kannst du alles, du musst dir eigentlich nur etwas ausdenken wie du sie vergleichen kannst.

wenn jemand ne Idee hat wärei ch dankbar…ich kann mir nicht vorstellen wie ich das testen kann…schießlich wird jedesmal was neues generiert…

Ich wüsste da auch nichts außer das einfach zu machen, wenns nicht geht wird ne Exception fliegen. Um das geschriebene zu überprüfen müssteste die Datei dann wieder einlesen.