sábado, junio 28, 2008

Más de Silverlight Unit Testing - Asynchronous Tests

Ya había mencionado un post a la introducción de Jeff Wilcox a la herramienta escrita por el mismo y la actualización a SL Beta 2 y los templates tanto de proyecto como para las Clases de Prueba. Después de usarlo me he topado con varios know issues, que esperamos se arreglen para cuando liberen Silverlight 2.0, pero ningún showstopper. Todo correo muy bien y las pruebas hechas con TFS, escritas para los objetos de negocio o para WPF son fáciles de migrar.

Dada la frecuencia en que tenemos tareas Asincronas en SL, necesitamos también soporte para poder probar estas. Un ejemplo tipíco es un WebRequest. En este caso lo veremos para un Servicio Web para el cual ya previamente agregamos la referencia. Este es el code snippet que les servirá para darse una idea de como crear este tipo de pruebas.

[TestClass]
public class ServiceClientTest:SilverlightTest{
   [TestMethod]
   [Asynchronous]
   public void GetTest()
   {
      ServiceClient client = new ServiceClient();
      client.GetCompleted += client_GetCompleted;
      client.GetAsync();
   }

   void client_GetCompleted(object sender, GetCompletedEventArgs e)
   {
      // Do something with e.Result;
      // Call this when done
      this.TestComplete();
   }
}

Decoramos con TestClass y TestMethod como en todas nuestras pruebas, pero agregamos el atributo Asynchronous a nuestro TestMethod. Esto hará que el framework se quede esperando a que otros threads terminen su chamba. Así que no tendremos que detener nuestro TestMethod y esperar a que nuestro webService obtenga una respuesta y lidiar con la sincronización. En algún momento se deberá mandar llamar a nuestro metodo client_GetCompleted y ahí haremos los asserts necesarios con el resultado. Al final, para indicarle al Testing Harness que ya terminamos debemos de llamar el metodo TestComplete. Si no hacemos esto, nuestra prueba se colgara. En caso de que exista alguna excepción y nuestro handler nunca se mande llamar, el framework se dará cuenta y marcará la prueba como fallada. Justo como se espera, funciona bien y es realmente simple.

Espero y les resulte útil.

Algo adicional que quisieran tomar en cuenta es que si van a mandar llamar a un WS desde SL tendrán problemas por Cross Domain Calls. Por más que configuren su servidor correctamente con el ClienteAccessPolicy.xml correcto va a fallar ya que por default las pruebas corren directamente sobre un archivo y no sobre un WebSite. Lo recomendable es en su website agregar una referencia a su proyecto de pruebas para que corran en el mismo contexto o al menos dentro de un WebServer de tal forma que pueda hacer Cross Domain Calls.

miércoles, junio 25, 2008

Como ver el Código Generado de LINQ to SQL en el Output de Visual Studio

Justo lo que estaba buscando o pensando hacer para poder depurar fácilmente lo que está pasando detrás de LINQ ya lo escribio Kris Vandermotten. En una aplicación de consola haríamos algo como:

context.Log = Console.Out;

En una aplicación de otro tipo, no tenemos hacía donde escriba el Log de LINQ to SQL. Con el código de Kris, simplemente diríamos,

context.Log = new DebuggerWriter();

Así que vayan y bajen su clase de su blog

Por cierto, odio LINQ to SQL y no puedo esperar a LINQ to Entities para usar nuevamente un ORM de verdad. Aunque tampoco puedo usar el Beta 1 de SP1 en este proyecto, así que me quede con mi disen~o bizarro por un momento. Más de esto en un próximo post.

lunes, junio 23, 2008

Siliverlight 2.0 Beta 2

En mi último post olvide uno de los links seguramente más importantes, sobre todo si tienen ya una aplicación en Beta 1.Seguramente tendrán algunos problemas al compilar para el Beta 2. Les sugiero ver las página de las diferencias y buscar los cambios. Por ejemplo a mi me salía el error 'System.Windows.Media.Animation.Storyboard' does not contain a definition for 'GetClockState', simplemente busque en ese docucmento GetClockState y decía "Storyboard.GetClockState has been changed to GetCurrentState", cambie el metodo y listo, he seguido los mismos pasos por cada error y en cuestión de minutos tengo migrados proyectos de Beta 1 a Beta 2. Uno de los que no me aparecio es un cambio en el ResourceDictionary.Add que ahora espera un parametro más, fuera de ese todos los cambios necesarios para la migración los he podido hacer con apoyo de esa página.

Espero que la migración de Beta 2 al release sea al menos así de simple. Finalmente este producto ya tiene una licencia GoLive desde el Beta 1, lo que básicamente significa que podemos poner las aplicaciones de Beta 2 en producción y la migración para nuestros usuarios será sencilla. No necesariamente significa que no abrá cambios en el API, pero seguramente serán minímos y Microsoft proveerá un documento con guías de como migrar.

Algo de lo que se esperá para el release, entre otras tantas cosas, es un control dropdownlist/combobox. De momento no lo tenemos, pero puede ser indispensable para muchas aplicaciones que quisieramos poner en producción aprovechando el GoLive License. Yo hice un control, es algo muy básico, pero funciona bien. Posiblemente en un próximo post ponga el código. Si alguien lo necesita dejeme un mensaje.

domingo, junio 15, 2008

Silverlight 2 Beta 2, .NET 3.5 Beta SP1 y SQL Server RC0

Microsoft recien libero Silverlight 2 Beta 2, .NET 3.5 Beta SP1 y SQL Server RC 0. Aquí les dejo los links importantes para que descarguen todo y se pongan a probar el nuevo software.

Silverlight

Les sugiero visitar los links en el orden que los pongo, igual para la instalación.

  1. Anuncio de Scott Guthrie con detalles de la liberacion de SL2
  2. GetStarted con Silverlight 2
  3. SP1 Beta para VS 2008 y .NET 3.5 detalles aquí, (instalación opcional)
  4. Tools para VS 2008
  5. Blend 2.5 June 2008
  6. Deep Composer (opcional)
  7. Unit Testing para SL 2 Beta 2

Van a encontrar más en el post de Scott, pero les resumo lo que me parece más importante.

  • Integración de controles al download de SL2 (ayudando a reducir el tamaño de tus .xap).
  • Soporte en Blend para editar Templates de Controles. Esto es una gran ventaja para diseñadores, ya que antes tenían que codificar mucho XAML.
  • Visual State Manager (VSM), sirve para controlar y definir templates para los diferentes estados de los controles y realiza también transiciones entre estos estados por nosotros. Por ejemplo un botón presenta un cambio en su template entre el estado normal y mouseover o pressed. Se cuenta con gran soporte de parte de blend para diseñar o modificar cada state, similar a como hacen los objetos en flash :)
  • Incluye un nuevo Visual Tree Helper para buscar los elementos, navegar entre padres e hijos.
  • Los que tengan aplicaciones que usen video, se beneficiaran del Adaptive Streaming, que en base al hardware y bandwidth del cliente descargará un contenido distinto.
  • Diferentes mejoras en el área de red, harán de SL un ambiente de programación más flexible. Por ejemplo, Duplex Communication permitirá que el servidor envíe información al cliente. Por otro lado el soportte para crear Proxies, obtener recursos de REST URIs o consumir servicios de JSON nos darán aún mayores opciones para interactuar con servers de una manera simple.

SP1 Beta para VS 2008

Este release incluye bastantes mejoras al framework recientemente liberado. No hay que olvidar que es un beta, sin embargo, tengo que agregar que funciona muy bien y la tecnología que estan integrando en este SP1 tiene ya mucho tiempo desarrollandose, inclusive antes de liberar el .NET Framework 3.5 y ha llegado a un punto de madurez en el que ya vale la pena meterse más a fondo a lo que viene, especialmente el MVC (más de esto luego).

Para información detallada pueden leer el post de Scott Guthrie y descargarlo de aca. Algo de lo más sobresaliente a notar (al menos para mi) es:

  • C# ahora te muestra errores semanticos tan pronto como los escribas, en lugar de esperar a que compiles
  • El tan esperado EntityFramework, digamos LINQ to SQL para aplicaciones complejas, un ORM de verdad.
  • MVC Framework, el nuevo paradigma de desarrollo web para ASP.NET (más info luego).
  • ADO.NET Data Services (Astoria) es una librería que permite facilmente ofrecer y consumir servicios tipo REST, basandonos en un DataContext
  • Un Routing Engine, usado en el MVC framework y ADO.NET Data Services (Astoria) para tener links bonitos como miweb.com/products/categories/beverages en lugar de links feos como miweb.com/ListaProductos.aspx?listBy=category&category=beverages
  • Performance Improvements para VS 2008, que realmente ya estan cubiertos por este HotFix desde Febrero.
  • Client-only Framework subset, nos permite desarrollar una aplicación de escritorio que se enfoque a un subset del framework, de tal forma que nuestros usuarios no tengan que instalar el framework completo (sin ASP.NET y otras cosas que no necesitan). Las aplicaciones desarrolladas para este subset correran de la misma forma en el framework completo. Básicamente hicieron un installer más pequeño que te instala los assemblies más comunes para el escritorio y en VS 2008 restrigen tus referencias a sólo esos para garantizar que tu app pueda correr en la versión reducida.
  • Mejoras a WPF en performance, data, nuevos efectos e Interoperabilidad con Direct3d.
MVC

Es la manera en que Ruby on Rails y muchos otros frameworks trabajan actualmente. Sin caer en polemica respecto a cual será mejor, tengo que decir que a mi me gusta mucho el estilo MVC ya que creo que provee una importante separación de responsabilidades y nos deja con un diseño más limpio, sin embargo el estilo de ASP.NET de siempre, seguirá siendo una buena opción, sobre todo para aplicación más simples donde consideren que no valga el esfuerzo adicional (principalmente el capacitar a la gente). Espero en otro post poderme extender más en el tema de MVC.

SQL Server 2008 RC0

Ya liberaron el primer RC del nuevo motor de Base de Datos de Microsoft. Lo malo es que esta version (RC0) esta disponible solo para socios de Technet, puedes ver más info aquí o si eres socio ir a descargarlo, de lo contrario esperar al RC1.