Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [Rails] Testing

  1. #1

    [Rails] Testing

    Ciao a tutti,

    se possibile vorrei che mi aiutaste a capire più compiutamente come funzionano le unità di Test in Rails.

    Sto leggendo l'ottimo libro "The Rails Way" che tratta nel dettaglio sia Test::Unit sia RSpec.

    Tuttavia mi sento molto spaesato in quanto non ho mai avuto a che fare con questa fase della progettazione software sin ora e non sono ancora riuscito ad afferarne la vera utilità.

    Avendo lavorato sempre in PHP "alla buona" trovo difficile assimilare i concetti esposti.

    Ora, dato che la cosa migliroe è sempre quella di esemplificare, potreste farmi degli esempi da "Mondo reale" in cui i test automatizzati possono essere molto utili se non indispensabili?

    Grazie in anticipo.

  2. #2

  3. #3
    Ti ringrazio, ora vedo di dare una bella lettura ai link che mi hai indicato.

    Tuttavia continuo a non capire dove può/deve essere usato un test automatizzato per il controllo del codice.

    Perchè, ad esempio, dovrei avere bisogno di una Test Unit per controllare se un Model impedisce o meno il salvataggio di un record in mancanza di un attribute indicato come obbligatorio.

    Es:

    codice:
    Model "Product"
    validates_presence_of :price
    Perchè non mi posso limitare a controllare il comportamento della form da browser ma avrei bisogno di una Test Unit?

    Avrei veramente bisogno di esempi più e meno semplici per accedere la lampadina nella mia testa.

  4. #4
    Originariamente inviato da CozzaAmara
    Perchè non mi posso limitare a controllare il comportamento della form da browser ma avrei bisogno di una Test Unit?

    Avrei veramente bisogno di esempi più e meno semplici per accedere la lampadina nella mia testa.
    http://www.agitar.com/solutions/why_unit_testing.html
    http://it.wikipedia.org/wiki/Unit_testing

  5. #5
    Grazie per i link, mi sono fatto un'idea più compiuta sul TDD.

    Tuttavia continuo a trovare difficile associare i concetti esposti con un esempio concreto.

    Potete, perfavore, farmi un esempio reale di come si dovrebbe procedere nel testing ad esempio di un Model?

    Es: voglio creare un Blog, creo un Model "Post" riferito alla tabella "posts" ecc.

    Per il singolo "Post" avrò bisogno di un "title" e di un "body" entrambi obbligatori.

    Da dove parto? Dalla scrittura del test come suggerito dal TDD, prima ancora che dal codice vero e proprio dell'applicazione?

    Come scrivo questo codice?

    Perfavore non datemi altri link a concetti teorici, ho bisogno anche solo di semplici snippet di codice da leggere come passo-passo.

    Grazie ancora.

  6. #6
    Tanto per chiarirci:

    Se scrivo due test come questi:

    codice:
    def test_post_must_have_a_title
      p = Post.new
      assert !p.save, "post must have a title"
    end
    
    
    def test_post_must_have_a_body
      p = Post.new
      p.title = 'title'
      assert !p.save, "post must have a body"
    end
    Entrambi dovrebbero fallire al primo "run"

    Se poi metto nel Model "Post"

    codice:
    validates_presence_of :title
    e rieseguo il test dovrei passare il primo test e non il secondo giusto?

    A questo punto aggiungo anche:

    codice:
    validates_presence_of :title, :body
    E di conseguenza ora il test case viene passato senza errori.

    E' quindi questo il modo corretto di procedere? Il codice, e la sua sequenza logica, che ho postato è formalmente corretto?

    Tnx.

  7. #7
    Originariamente inviato da CozzaAmara
    Tuttavia continuo a non capire dove può/deve essere usato un test automatizzato per il controllo del codice.
    Perché all'aumentare della complessità del codice aumenterà il tempo buttato a premere submit ed F5 sul browser.
    Inoltre, se hai un progetto con una buona test suite, puoi eseguire operazioni complesse come il refactoring o l'upgrade della versione di Rails in pochi minuti, senza passare ore a verificare che ogni parte della tua applicazione funzioni.

    In linea di massima
    * ogni metodo dovrebbe avere almeno un test.
    * ogni cosa è testabile
    * ciò che non è facilmente testabile ha probabilmente errori di design

    Should I test all the fucking time?

    Ecco un esempio concreto su un model molto semplice.



    codice:
    create_table :user do |t|
      t.string  :first_name
      t.string  :last_name
      t.integer :age
    end
    
    class User < ActiveRecord::Base
      
      def name
        [first_name, last_name].reject { |e| e.blank? }.join(" ")
      end
      
    end
    
    class UserTest < ActiveSupport::TestCase
      test "name" do
        assert_equal("Simone", User.new(:first_name => "Simone").name)
        assert_equal("Carletti", User.new(:last_name => "Carletti").name)
        assert_equal("Simone Carletti", User.new(:first_name => "Simone", :last_name => "Carletti").name)
        assert_equal("", User.new.name)
      end
    end

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.