March 30, 2007 by alex
Da unsere vielen Tests mittlerweile ein wenig lange brauchen, haben wir uns am heutigen Forschungstag mal wieder mit dem Problem Testing auseinandergesetzt. Das Ergebniss diesmal schon vorne weg: unsere erfolgreichste Entdeckung ist Mocha. Mit diesem Framework lassen sich Stubs und Mocks mit realen Objekten verwenden. Es folgt ein kleiner Auszug aus unserem bisherigen Testcode.
def create_activated_user(attributes = {})
email = generate_email_address
User.create!({:gender => 'm', :first_name => 'joe', :last_name => 'doe', :email => email,
:password => 'test', :password_confirmation => 'test', :city => "berlin", :status => 'active'
}.merge(attributes))
end
def create_auto(user = nil, attributes = {})
user = create_user unless user
Auto.create!(auto_hash(user).merge(attributes))
end
def test_activity_returns35_for_user_with_picture_and_auto_with_picture
user = create_activated_user :photo => '1.gif'
create_auto user, :photo => '2.gif'
assert_equal(35, user.activity)
end
Dauer: 795ms
Nach kurzem Studium des Mocha Cheat Sheets haben wir dann den Test wie folgt geändert.
def test_activity_return35_for_user_with_picture_and_auto_with_picture
with_photos = stub :with_photos => [Auto.new(:photo =>'test.gif')]
user = User.new :photo => '1.gif'
user.stubs(:autos).returns(with_photos)
assert_equal(35, user.activity)
end
Dauer: 49ms
Na wenn das keine signifikate Verbesserung ist. Auf Mocha gestoßen sind wir über den Testing Rails Blog, auf dem leider nichts Neues mehr zu passieren scheint. Eine kleine Übersicht von Stub-Frameworks mit problemspezifischen Einschätzungen fanden wir auf dem Blog von Jay Fields.
Wir werden Mocha in der nächsten Zeit in unseren Test integrieren, und bei der 2000ten Revision sagen wir euch wie lange unsere Test Suite läuft.