In Rails ist mit Test::Unit ein Testframework enthalten, das testbegleitete und testgetriebene Softwareentwicklung einfach macht. Java-Entwicker werden sich zu Hause fühlen. Test::Unit ärbeitet ähnlich wie Junit.

Softwareentwicklung mit Tests

Bearbeiten

Testbebleitete Softwareentwicklung

Bearbeiten

..

Testgetriebene Softwareentwicklung

Bearbeiten

..

Test::Unit Tests schreiben

Bearbeiten

Ein erstes Beispiel ..

# Eigentlich sollte 
# require 'test_helper'  
# reichen, aber in meiner Umgebung brauche ich noch
require File.dirname(__FILE__) + '/../test_helper'

class EventTest < ActiveSupport::TestCase
  def test_creation
    sev1 = Event.create(:title => "first event")
    assert_equal "first event", Event.find(:first).title
  end

  # ..
end

.. zeigt wie man das Framework einbindet.

Eine Datenbank nur für Tests

Bearbeiten

Vielleicht kennt der eine oder andere Leser das Problem aus seiner bisherigen Programmiererfahrung. Beim Testen ist etwas unvorhergesehenes passiert. Soweit ok, denn deshalb testen wir ja. Aber jetzt kommt's. Ist die Datenbank betroffen? Und wenn ja, wie bekommen wir sie wieder den alten Zustand? Die Lösung von Rails ist einfach und vielleicht haben wir sie schon beim setup gesehen.

Damit dieses Problem gar nicht erst auftreten kann schlägt uns Rails vor drei unabhängige Datenbanken für Entwicklung, Test und Produktion zu benutzen. Konfiguriert wird das in config/database.yml. Diese Datei haben wir mit der "rails"-Anweisung zusammen mit dem Rest der Railsanwndung automatisch generiert. Über dem Abschnitt, der die Test-Datenbank konfiguriert stehen zwei Warnungen.

# config/database.yml

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  timeout: 5000

(TODO) Warnungen:

  • rake löscht die Testdaten ...
  • Deshalb sollen wir immer eine eigene Test-Datenbank benutzen

So haben wir die Testdaten immer in einem definierten Zustand und wir vermeiden sicher Konflikte mit Entwicklungs- und Produktionsdaten.

Testmethoden

Bearbeiten

Fixtures

Bearbeiten

Schema von der Devellopmentdatenbank in die Testdatenbank kopieren:

rake db:test:prepare

Tests ausführen

Bearbeiten
ruby test/unit/xxx_test.rb

Statt einer Zusammenfassung: Sie haben den Abschnitt über Tests nicht verstanden ..

Bearbeiten
  • wenn sie für Test und Entwicklung dieselbe Datenbank benutzen
  • wenn sie Core-Funktionen von Rails in ihren Anwendung testen
  • wenn sie nach einer Restrukturierung (Refactoring) ihre Testsuite nicht laufen lassen
  • ...