# I dubbi esistenzial sul design e sul testing

**URL:** <https://www.ruby-forum.com/t/i-dubbi-esistenzial-sul-design-e-sul-testing/162747>\
**Category:** IT\
**Created:** [March 13, 2009, 11:28am UTC](https://www.ruby-forum.com/t/i-dubbi-esistenzial-sul-design-e-sul-testing/162747 "2009-03-13T11:28:02Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tucano](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/858c86/32.png) [@Tucano](https://www.ruby-forum.com/u/Tucano)\
**Post date:** [March 13, 2009, 11:28am UTC](https://www.ruby-forum.com/t/i-dubbi-esistenzial-sul-design-e-sul-testing/162747/1 "2009-03-13T11:28:02Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Tucano](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/858c86/32.png) [@Tucano](https://www.ruby-forum.com/u/Tucano)\
**Post date:** [March 15, 2009, 1:26am UTC](https://www.ruby-forum.com/t/i-dubbi-esistenzial-sul-design-e-sul-testing/162747/2 "2009-03-15T01:26:28Z")

</div>

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. 🙂

Per costruire data on the fly for test io di solito uso FactoryGirl  
([GitHub - thoughtbot/factory\_bot at master](http://github.com/thoughtbot/factory_girl/tree/master)) oppure  
Machinist ([GitHub - notahat/machinist: Fixtures aren't fun. Machinist is.](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](mailto: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](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

> **[Read my blog | Enrico Teotti](https://teotti.com/)**
>
> agile coach, (visual) facilitator with a background in software development and product management since 2001 in Europe, Australia and the US.

---

<div class="post-metadata">

**Author:** ![Tucano](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/858c86/32.png) [@Tucano](https://www.ruby-forum.com/u/Tucano)\
**Post date:** [March 16, 2009, 7:38pm UTC](https://www.ruby-forum.com/t/i-dubbi-esistenzial-sul-design-e-sul-testing/162747/3 "2009-03-16T19:38:09Z")

</div>

Ciao,

Il codice del coso lo trovate online

> **[GitHub - tucano/pwned: Processing Wise Node and Edges Drawer](https://github.com/tucano/pwned/tree/master)**
>
> 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 😛
2. Il codice e’ cosi’ sintetico che finisci anche tu per tentare di  
scrivere codice ‘Haiku’ ([xkcd: Not Enough Work](http://xkcd.com/554/)) … e si perde altro  
tempo!

saluti!

Tucano

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