miércoles, 10 de diciembre de 2008

Como incluir un fichero en el resultado de una prueba unitaria en Visual Studio 2008

Existen ocasiones en las que nos puede interesar que una prueba unitaria incluya un determinado recurso. Esto ocurre cuando el código que deseamos testear cuenta con la existencia , por ejemplo, de un determinado fichero de texto, una hoja de cálculo o una Service-based Database (.mdf)

Como sabrán, el resultado del proceso de test genera una nueva carpeta (TestResults) donde incluye el resultado de cada generación. Si dicho resultado cuenta con una referencia relativa (la mejor manera de hacerlo) hacia un recurso pues ya la tenemos liada...

Pero como siempre (o casi) la solución es más facil de lo que parece. Existe un decorador especialmente creado para esta necesidad. Basta con colocar sobre el método que deseamos incluya el recurso el item de despliegue de la siguiente manera:

[TestMethod()]
[DeploymentItem(@".\fichero.xls")]

public int EjemploTest()
{

...

(.\ si está en la raiz claro...)

Por supuesto los más inquietos ya se estarán preguntando como evitar tener que incluir este decorador en todos los métodos (especialmente interesante si se trata de una Service-based Database (mdf)).

Pues para esto también existe una facil solución. Basta con incluir el recurso en el fichero LocalTestRun.testrunconfig dentro del elemento Deployment con la siguiente sintaxis:


\[Nombre del proyecto]\[Nombre del recurso]

y ya podemos quitar el decorador.

Como siempre, espero que les sea de utilidad.

Un saludo.

Extra ball:
Si desean incluir un fichero Service-based Database (mdf)  en una prueba unitaria y referenciarlo con un connection string del estilo: "..AttachDbFilename=|DataDirectory|.." asegurense que tienen instalado el SP1 de VisualStudio 2008.  Si este, la referencia se realiza directamente contra en .Net Framewok y no encontrará el recurso.


lunes, 1 de diciembre de 2008

WPF Binding del control al propio DataContext

Alguna vez me han proguntado como se puede relacionar el propio objeto del DataContext en un Binding. Esto que en principio puede parecer un poco raro suele ser muy habitual a la hora de establecer Converters en WPF (IValueConverter).

Bueno pues el tema es de lo más simple. Supongamos que deseamos hacer un Binding del objeto del contexto a la propiedad Text de un TextBlock:

Text="{Binding Mode=OneWay, Converter={StaticResource andoniBlogConverter}}

*Notese que no se establece Path ni por propiedad ni a través de la sobrecarga del constructor de la clase Binding

Por supuesto se necesitaría un converter puesto que el objeto del contexto no es de tipo string (necesario para la propiedad Text seleccionada)

Por supuesto necesitariamos el Static Resource:

andoniNamespace:AndoniBlogConverter x:Key="andoniBlogConverter"


y la referencia al namespace en la declaración del UserControl:

xmlns:andoniNamespace="clr-namespace:Andoni.blog.ExampleConverter"

Espero que les sea de ayuda.

Bueno, un saludo