Hallo,

Am 01.02.2009 um 11:01 schrieb Christian Beier:

 test "should get city from geocode" do
   geocode = "52.409645,13.059826"
   location = get_geocode(geocode)

   assert_equal "Potsdam", assigns(:location)
 end

Beim Ausführen des Tests, erhalte ich die Fehlermeldung:

1) Error:
test_should_get_city_from_geocode(HotspotsControllerTest):
NoMethodError: undefined method `get_geocode' for
#<HotspotsControllerTest:0x243f5ec>


Kann ich in Funktionalen Tests überhaupt private Methoden testen?

Ich sehe 2 Probleme. Zum einen rufst Du die Methode ja gar nicht auf dem Controller-Objekt auf (das wäre dann eher @controller.get_geocode()) und zum anderen ist die Methode wie Du anmerktest private. Das kann man theoretisch umgehen:

@controller.send(:get_geocode, geocode)

Allerdings ist das ein typischer Code-Smell. Grundsätzlich würde ich 2 Dinge dazu anmerken (Wenn Sie erlauben, Sir):

- private Methoden in funktionalen Tests abtesten zu wollen ist ein Code Smell. Funktionale Tests sollten (so sehe ich das) den Controller "von aussen" testen. Es sind eben KEINE Unit-Tests. Du müsstest also eher die Actions, die diese Methode verwenden auf ihre richtige Funktion testen.

- Das ganze riecht allerdings danach als wäre die Methode grundsätzlich im Controller falsch aufgehoben, da es sich vermutlich um Domänen-Logik (klingt furchtbar auf deutsch, finde ich) handelt, die üblicherweise ins Modell gehört. Wenn ich Deinen Code richtig aus Deinen Schnippseln extrapoliere klingt das alles danach als würdest Du eigentlich auf Deinem Modell ein virtuelles Attribute "geocode" anlegen wollen, was genau das macht, was bei Dir die Methode macht.

Hoffe gehulfen zu haben und

Gruß,

Jan
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug

Antwort per Email an