I dubbi esistenzial sul design e sul testing


#1

Ciao a tutti,

Alcuni dubbi “esistenziali” … scusassero se mi spiego male o se
l’attuale design vi sembra orribile.

SHORT VERSION: come si fa unit testing su modelli con relazioni?

LONG VERSION:

Ho un modello Network, e tre modelli attachment_fu (Edgefile,
Configfile, [Annotationfile] ).

Annotation file puo esserci o non esserci (opzionale)

Avrei fatto questo

class Network < ActiveRecord::Base
has_one :edgefile, :dependent => :destroy
has_one :annotationfile, :dependent => :destroy
has_one :configfile, :dependent => :destroy
end

…e negli altri modelli: belongs_to :network

Vi sembra ragionevole?

Per controllare la presenza di un edgefile e un configfile in Network:

validates_presence_of :edgefile, :configfile
validates_associated :edgefile, :configfile

ha senso? o sto sbagliando completamente le validazioni?

Come procedo per lo unit testing?

Mi spiego: quando in un test creo una nuova network, come faccio ad
assegnarli anche un edgefile e un configfile?

Ora sto facendo cosi:

network = Network.new(
:name => name,
:description => ‘blablabla’,
:edgefile => edgefiles(:barabasi),
:configfile => configfiles(:barabasi)
)

Sto “riciclando” delle fixtures ma non sono sicura che sia una buna
idea.

In sintesi: ma come si fa unit testing su modelli con relazioni?

Tucano


#2

Un consiglio che mi sento di darti e’ di non testare features offerte
da ActiveRecord. E’ abbastanza inutile. Sono gia testate nel
framework. Invece testa tutto cio’ che crei tu. Se usi rspec, puoi
lanciare un rake spec:rcov che genera una analisi di cosa non e’
coperto da test.
Altro consiglio e’ di bruciare ogni ricordo di Fixtures, ma mi pare di
capire che questo gia lo sai. :slight_smile:

Per costruire data on the fly for test io di solito uso FactoryGirl
(http://github.com/thoughtbot/factory_girl/tree/master) oppure
Machinist (http://github.com/notahat/machinist/tree/master).
Entrambi permettono di impostare associazioni tra modelli, su github
trovi qualche esempio.
Facci sapere come va, saluti.
Enrico

2009/3/13 Tucano removed_email_address@domain.invalid:

has_one :configfile, :dependent => :destroy
validates_presence_of :edgefile, :configfile
Ora sto facendo cosi:

In sintesi: ma come si fa unit testing su modelli con relazioni?

Tucano


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


Enrico T.
IT consultant, accessible web sites and web applications
Sydney, NSW, Australia
removed_email_address@domain.invalid
mobile (IT) +393286590765
mobile (AU) +00610416748450

http://www.teotti.com


#3

Ciao,

Il codice del coso lo trovate online

http://github.com/tucano/pwned/tree/master

Ho risolto cosi (concettualmente parlando)

Ho un modello Network, e tre modelli attachment_fu
(Edgefile,Configfile, [Annotationfile] ).

class Network valida e fa test sui suoi attributi e se ne sbatte di
quello che succede ai suoi sottoposti (e’ un capo crudele)

quindi niente piu’

validates_presence_of :edgefile, :configfile
validates_associated :edgefile, :configfile

I tre obbedienti modelli attachment_fu fanno le loro validazioni.

Ho aggiunto un modello Fileservice (no ActiveRecord) che viene
chiamata dal controller e si occupa di controllare che ci sia tutto
(il caporale!).

Fonti: Advanced Rails Recipes e Professional Ruby on Rails (rappin)

Per i test, ti do ragione… ma mi diverto troppo a scriverli!

Chiudo con le mie CRITICHE a rails (forza coi flame!)

  1. La suite di test e’ troppo ben fatta, cosi’ ben fatta che ci perdo
    un sacco di tempo :stuck_out_tongue:
  2. Il codice e’ cosi’ sintetico che finisci anche tu per tentare di
    scrivere codice ‘Haiku’ (http://xkcd.com/554/) … e si perde altro
    tempo!

saluti!

Tucano

Il giorno 15/mar/09, alle ore 01:26, Enrico T. ha scritto: