Newsgroup: it.comp.lang.javascript
Titolo: Rompiamo il ghiaccio: Unit Testing

Iniziamo con uno dei post a cui mi riferivo nei thread scorsi.
Premetto che per lo più in queste discussioni vorrei focalizzarmi sullo
sviluppo di applicazioni, e non sull'uso di JS per realizzare siti web.
Nello sviluppo di applicativi lo Unit Testing è una pratica ormai
consolidata e fondamentale. In JS, per diversi motivi, un poco meno.
Sarà anche perché per molti anni ha faticato ad esser considerato "un
linguaggio" degno di attenzione; ma fortunatamente le cose sono cambiate.
Quindi:
- Che libreria usate per le vostre Unit Test, e in che modo le eseguite?
- Applicate il Mocking?
- In che modo calcolate il code coverage?
- Che Design Pattern usate - se ne usate - per semplificare lo unit testing?
Queste sono le domande che mi sono fatto e a cui ho dovuto rispondere -
e in cui in alcuni casi ancora non ho una risposta definitiva - quando
ho iniziato a gettare le basi per la metodologia di sviluppo del mio
team client side per un certo applicativo, che come target raggiungere
l'85% di code coverage della business logic lato client.
Prima di entrare nel vivo della discussione, vorrei sapere le vostre
risposte, se è un argomento che interessa, altrimenti passiamo oltre. :)
I temi da trattare sono moltissimi.
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 se ne usate - per semplificare lo unit testing?
Livello troppo alto, IMHO, per un newsgroup di javascript. 

 Livello troppo alto, IMHO, per un newsgroup di javascript.
Piu` che altro io ho l'impressione che tutti quelli che sono in questo ng 
usino js per siti web piu` che per applicativi.
Spero di sbagliarmi, e che ci sia qualche lurker che prosegue la 
discussione, perche` sto iniziando anche io (in PHP) a sviluppare in modo 
agile, e mi sto studiando unit testing e CI.
I pattern li uso in PHP, ma non li ho mai applicati volontariamente a JS.
Quindi spero che la discussione prosegua per darmi un po' di panoramica 
in merito. :)
Bye.

 - Che Design Pattern usate - se ne usate - per semplificare lo unit testing?
non ho ben capito se intendi sviluppare secondo la logica TDD (test 
driven development) oppure vuoi solo impostare lo unit test.
cmq, in linea di massima come diceva Cristiano č un pochino tanto di 
alto livello, in ogni caso potrebbe essere utile ragionarci un po' su.
io:
- non uso librerie specifiche di unit test javascript
- applico il mocking
- non calcolo il code coverage
- uso l'approccio di puremvc 
http://puremvc.org/content/view/102/181/
per eseguire il test istanzio i vari oggetti e li faccio lavorare
faccio le assert e vedo se torna quello che deve.
alla fine su 100 cose testate vedo cosa va e cosa no e determino una %
e posso cosi' capire se a fronte di modifiche lato server l'applicazione 
continua a funzionare e in caso di lavoro in teamo capisco dove sta il 
problema.
saluti

 Livello troppo alto, IMHO, per un newsgroup di javascript.
In verità è solo a un livello troppo alto rispetto alle discussioni 
abituali.
Apprezzo invece lo sforzo di Zer0 e credo che sia solo un bene toccare 
queste (e altre) problematiche.
Spero attirino nel newsgroup altra gente preparata, qualche vecchia 
gloria (Balestra, ci senti?) e credo che sia utile che anche chi muove i 
primi passi metta il naso in argomenti di cui magari non considerava 
l'esistenza.

 - Che libreria usate per le vostre Unit Test, e in che modo le eseguite?
Non č propriamente unit test, ma mi č sembrata interessante questa e mi 
son fatto un bookmark (non ho ancora provato nulla):
http://jupiterjs.com/#news/syn-a-standalone-synthetic-event-library
Vedo che č inglobata in un progetto a piů ampio respiro che comprende 
unit testing tramite QUnit (
http://docs.jquery.com/QUnit
):
http://jupiterjs.com/news/funcunit-fun-web-application-testing

 wrote:

Io non mi ritengo un newbie, ma devo confessare che il 90% della
terminologia usata mi risulta completamente nuova.
Lavoro soprattutto con PHP e realizzo dei CMS ad-hoc, Javascript lo
conosco più che altro per quello che riguarda l'utilizzo nei siti che
realizzo. 
Mi diverto a scrivere funzioni personalizzate per agevolare l'esperienza
di navigazione del sito, ma più spesso utilizzo librerie già pronte.
L'idea di lurkare una discussione come questa è interessante, ma dovrei
passare un bel pò di ore per informarmi anche solo riguardo uno dei
termini da voi usati. Impossibile per me, (s)fortunatamente devo
lavorare... ;-)
Per finire devo comunque dare ragione a te e a Zer0, alzare il livello
delle discussioni non è mai un male, come non lo è imparare cose nuove.
Max
-- 
http://www.maxori.it
L'Arte è la capacità di fare cose di nessun valore
e di riuscire a venderle
F. Zappa

 Livello troppo alto, IMHO, per un newsgroup di javascript. 
No, non è un livello troppo alto per un NG di JavaScript. Se guardi un
po' le tematiche affrontate alle conference, meeting o semplici birrate
tra sviluppatori JS all'estero, sotto questo tipo di argomenti non si
scende.
Magari, può esserlo per questo NG, se guardiamo i precedenti, ma del
resto l'obiettivo di queste messaggi è proprio quello di innalzarne un
attimo il livello, no?
Ormai penso che sia finito il periodo in cui si era più occupati a
rispondere alle domande di newbie che a trattare argomenti un po' più
interessanti  - basta vedere l'affluenza dei thread, tempo per noi ne
abbiamo - quindi possiamo sfruttare il NG per discutere di tematiche che
riguardano il nostro modo di sviluppare.
Almeno, io la vedo così. :)


 in merito. :)
Se partecipi pure, sei il benvenuto. ;)


 problema.
Capisco. Mi suona un po' troppo empirico come approccio - ma è anche
vero che JS di suo non ti permette grandi virtuosismi, bisogna lavorarci su.


 
http://jupiterjs.com/#news/syn-a-standalone-synthetic-event-library
Interessante, a una prima occhiata sembra andare a sostituire i test che
facciamo con Selenium al momento. Me lo segno, ci ragiono su, e poi in
caso lo passo ai tester - che se le smazzino un pochino anche loro,
queste cose, e che diamine! ;)
Vedi, questa discussione ha già portato - almeno a me - un'ottima
informazione che vale la pena approfondire.


 delle discussioni non è mai un male, come non lo è imparare cose nuove.
Grazie. :) Spero che parteciperai ogni tanto alla discussione, e che
comunque ti possa dare almeno qualche buono spunto.


 Intendi dire che li hai applicati
involontariamente? ;)
Beh, per definizione i pattern si *scoprono*, non
si *inventano*;
Quindi è perfettamente possibile applicarli
involontariamente :P
-- 
By ZeD

 involontariamente :P
È certamente possibile che si stia usando un Design Pattern
inconsapevolmente, ma solo quando i Design Pattern non si conoscono. ;)
Qui siamo in tutt'altro contesto. :)


 applicarli in JS e vederne l'utilità anche client side. :)
Credo di si`, ma non sono mai arrivato a dimensioni tali da averne 
bisogno, per ora.
 
Bye.

 Qualche volta un Factory (in PHP e` "integrato nel linguaggio")
Sarò un po' rimbambito oggi, e lo sono, ma non ho capito che intendi sia 
pensando a "Factory method" che a "Abstract factory".

 pensando a "Factory method" che a "Abstract factory".
Premesso che non sono un mago dei pattern, e anzi li sto studiando uno 
alla volta, un factory in Java e` per esempio cosi`:
interface DBManager {blablabla};
class MySQLManager implements DBManager {blablabla};
class PgSQLManager implements DBManager {blablabla};
class DBFactory {
 public DBManager getManager(String type)
 {
  switch (type) {
    case 'MySQL':
      return new MySQLManager();
    break;
    case 'PgSQL':
      return new PgSQLManager();
    break;
  }
 }
}
In PHP puoi fare
public function DBFactory($type)
{
 $classname = $type.'Manager';
 return new $classname();
}
Buttate giu` al volo senza controllarle.
Con o senza interface. Con l'autoload non serve nemmeno includerle prima.
Bye.

 }
Capito che intendevi dire.

 bisogno, per ora.
In siti web relativamente semplici si, è vero, solitamente non vi è
necessità. Ma in web application non se ne può fare a meno. :)


 Buttate giu` al volo senza controllarle.
Questo lo puoi fare anche in JS. ;)
