Team System ASP.NET Unit Testing
Tornato in albergo dopo una giornata su SQL 2005 di Kimberly Tripp, per rilassarmi :-), leggo questo post http://blogs.msdn.com/ejarvi/archive/2005/08/23/455215.aspx dove si decanta la funzionalità di VSTS per generare in automatico e esguire unit test su ASP.NET. Premesso che non si possono generare unit test di pagine aspx ma del loro code behind (pardon....code file nella 2.0) credo che la funzionalità sia utile ma non strategica: il codice del code file dovrebbe richiamate una classe BizLayer o Data Access Layer (o volendo UI Layer) che esegue il lavoro necessario alla pagina stessa e non dovrebbe contenere il codice operativo e funzionale della pagina. Questo, come suggeriamo dal 1997 in VB 5, consente di centralizzare la logica applicativa e l'accesso ai dati e creare un componente condivisibile a più applicazioni web (e non web) e a più versioni dell'ambiente (si pensi a un componente VB6 utilizzabile ancora oggi in .NET).
Il codice della pagina, al limite può contenere i controlli sulla user interface, ma anche in questo caso, personalmente preferisco creare uno strato riutilizzabile (UILayer) che gestisca l'interazione con l'utente. A mio avviso quindi la funzionalità di Unit Test sul code file è utile, ma non è certo fondamentale o eccezionale. Sarebbe molto più utile, nel prodotto, un meccanismo per generare unit test (e stress test) su un'interfaccia Windows Form cosa che non è prevista nel prodotto se non con tool di terze parti.
Già che parliamo di VSTS e ASP.NET, occhio al fatto che le applicazioni web (di contenuto ma anche web service) vengono implementate dall'application designer come progetti memorizzati sul file system e quindi utilizzabile da VS 2005 con il suo web server integrato nell'interfaccia utente. VS utilizza una porta diversa per ogni progetto creato nella solution e fortunatamente memorizza tale porta nella configurazione in modo da riutilizzare sempre la stessa durante il ciclo di sviluppo. Il problema è che spesso è necessario testare il prodotto sotto IIS: in tal caso si può facilmente fare un "copy project" su IIS del progetto file system, ma diventa impossibile utilizzare unit test sul progetto in IIS. Per risolvere il tutto occorre creare a mano un progetto ASP.NET da VS 2005 e poi trascinarlo nel Application Designer...che non è proprio il massimo visto che prima si dovrebbe progettare e poi implementare. Il consiglio è quindi: prima di disegnare nell'AD una'applicazione web, creare il progetto da VS; questo fa si che nell'application diagram appaia l'applicazione; a questo punto si può configurare e connettere l'applicazione alle altre nel diagramma come se fosse stata drag&droppata dalla toolbox.