TFS, Windows Phone y MSTests

¿Quieres que en las builds que tengas configuradas en TFS se ejecuten los test de tu aplicación Windows Phone?

Seguramente habéis probado a incluir un proyecto del tipo "Windows Phone Unit Test App" y os habéis puesto a crear nuestros tan amados tests. Pero a la hora de incluirlo en el repositorio de código, os habréis dado cuenta de que pasa algo raro: Los test no se ejecutan. (Si no te has dado cuenta, deja de leer esto y ve a comprobarlo)

La cosa es que ese proyecto de test lanza un emulador de WP y ejecuta los test y eso TFS no lo soporta todavía. Así que tienes dos opciones:

1) Dejar de hacer tests de tu aplicación WP.

2) Continuar leyendo.

Bien, si estás aquí, te cuento la solución en unos cuantos pasos:

1) Añade un proyecto de test típico de Visual Studio: Visual Studio Unit Test Project.

2) A este proyecto de test, añade una referencia del proyecto Windows Phone 8 que estés desarrollando.

3) Añade una copia local de los assemblies de Windows Phone que necesites, por ejemplo:

- System.Windows

- Microsoft.Phone

Los encontrarás en el directorio C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Tools\MDILXAPCompile\Framework

4) Copialos a un directorio local, que también tendrás que subir al TFS, llámalo por ejemplo /lib/ y ahora edita el XML del proyecto de test (el .csproj) y reemplaza:

<Reference Include="System.Windows" />
<Reference Include="Microsoft.Phone" />

por:

  <Reference Include="System.Windows, Version=2.0.6.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, processorArchitecture=MSIL">
  <HintPath>lib\System.Windows.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Phone, Version=8.0.0.0, Culture=neutral, PublicKeyToken=24eec0d8c86cda1e, processorArchitecture=MSIL">
  <HintPath>lib\Microsoft.Phone.dll</HintPath>
</Reference>

Además, para evitar los warnings cada vez que compiles añade este elemento al primer grupo de <PropertyGroup> del .csproj:

<ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>

A partir de este momento, cuando incluyáis vuestro proyecto en vuestro TFS vuestros tests se ejecutarán como si lo hiciesen en el emulador, pero sin tener que lanzarlos.

Espero que pronto den solución a este "problema" y lo incluyan en la próxima versión.

Este post ha sido gracias a una respuesta en stackoverflow http://stackoverflow.com/a/13035195 que me ha salvado el día.

¿Se os ocurre otra forma de conseguir el mismo resultado?

Espero que sirva.

Juan María Laó Ramos.

3 pensamientos en “TFS, Windows Phone y MSTests

  1. Miguel Angel Santiago

    Muchas gracias por el post! Yo estoy también peleándome con ejecutar los tests de un proyecto WP8 en el Team Foundation Service.

    He seguido los pasos que indicabas, pero aún no lo he conseguido. Mirando las trazas del TFS, lo que señala es que no encuentra los tests si quiera. De hecho, es que no se genera ningún compilado asociado al proyecto de test cuando miro el drop. ¿Qué me falta por hacer? Cuando incluía el proyecto tipo Windows Phone Unit Test, si que localizaba el compilado aunque no los ejecutaba.

    Te pongo la línea de Automated Tests para la cofiguración del Build:
    “Run tests in test sources matching **\*test*, Target platform: ‘X86’, Fails build”

    Un saludo,

    MaS

    1. juanlao Autor

      Hola, Asegurate de que se esta compilando el proyecto de tests.
      Abre el configuration manager y comprueba que esta marcado para compilar en la configuracion X86, que es la configuracion que tienes puesta en tu build.
      Espero que sirva 🙂

      1. Miguel Angel Santiago

        Efectivamente!!! Antes de escribir el comentario lo miré de hecho y estaba marcado el check de Build del proyecto de test. Pero no me dí cuenta que estaba seleccionada en la combo de plataformas la opción de “Mixed Platforms”. Cuando cambié a x86, el check de Build se desmarcó :-S

        Acabo de probar con un test simple y ha funcionado. Ahora empezaré a incluir tests que requieran de librerías de WP.

        Muchas gracias!

Los comentarios están cerrados.