# Methoden Testen und schaun ob richtiges Ergebnis?



## tkler (15. Mrz 2010)

Hi.
Habe eine Stackmaschine gebastelt.

Hier mal ein Auszug:

```
import java.util.*;

public class Stackmaschine {
 private LinkedList<Double> stack = new LinkedList<Double>(); 
 public double ergebnis = 0;

public void push(Double d) 
     {
        stack.push(d);
    }
```

So, jetzt würde ich gern einen Test schreiben! Ich würde gern die verschiedenen Methoden aufrufen, push, push...dann z.b add() und dann soll der Test schaun, ob das Ergebnis, das richtige ist...

So..
wie kann ich in meinem Test nun, die einzelnen Methoden aufrufen?

Habe es so versucht: Also, 3+4 = 7


```
import junit.framework.*;

public class MoneyTest extends TestCase {

 

 public void testSimpleAdd() {
    
     Stackmaschine push = new stack.push(3.0);
     new Stackmaschine().push(4.0);
     new Stackmaschine().add(); 
     
     new Stackmaschine().show();
    
    
   
// damit würde ich ja dann irgendwie schaun, ob das erwartete Ergebnis gleich dem ausgeführten ist
  Assert.assertTrue(expected.equals(result));
  }
}
```

Ich komm garnicht klar...versteht ihr was ich meine? Der Code da oben ist ein wenig jetzt durcheinander, weil ich soviel rumprobiert hab.
Ich bekomms aber einfach nicht hin, wie ich von der einen Klasse auf die andere die methoden aufrufe?!

Ich bräuchte mal ein exemplarisches Beispiel....
Wäre euch sehr Dankbar =)


----------



## SlaterB (15. Mrz 2010)

du rufst doch in einer Klasse Methoden einer anderen auf, 
viel kürzer geht das kaum wenn jeder Parameter und Befehl einzeln übergeben werden muss,

wieso aber überall 'new Stackmaschine()'?
das soll doch sicher die ganze Zeit dasselbe Objekt sein

-----

wenn du mehrere entsprechende Tests machst, dann kopiere nicht überall den Code sondern schreibe dir eine Metho
testAdd(int a, int b, int expected);
oder ähnlich,
darin muss aber dein Code wie bisher auftauchen, nur durch Magie passiert nix, alles muss irgendwo mindestens einmal stehen
(und idealerweise nicht öfter)


----------



## tkler (15. Mrz 2010)

Danke für die schnelle Antwort.
Aber ich versteh das immernochnicht so ganz mit dem Testen :/

Also ich möchte überprüfen, ob die beiden Ergebnisse gleich sind.


```
import junit.framework.*;

public class MoneyTest extends TestCase {

 

	public void testadd()
	{
		Stackmaschine stackmas1 = new Stackmaschine();
		stackmas1.push(2.0);
		stackmas1.push(3.0);
		stackmas1.add();
		stackmas1.show();
		

		Stackmaschine stackmas2 = new Stackmaschine();
		stackmas2.push(2.0);
		stackmas2.push(3.0);
		stackmas2.add();
		stackmas2.show();
	

      assertEquals(stackmas1, stackmas2);
}

}
```

Hier müssten die Ergebnisse ja total identisch sein.
Aber der Test macht ein fehler?


----------



## SlaterB (15. Mrz 2010)

weil du die beiden Stackmaschine-Objekte vergleichst und die sind nicht gleich nur weil du das dir so wünscht,

stattdessen musst du die Ergebnisse abfragen, zwei double also, die kannst du dann vergleichen


----------



## eRaaaa (15. Mrz 2010)

oder du musst die equals-Methode in Stackmaschine dementsprechend überschreiben...


----------



## tkler (15. Mrz 2010)

aah ok, danke 
Habs jetzt hinbekommen!
Habs aber mit assertTrue(erwartet == stackmas1.ergebnis) gemacht


----------

