Estoy usando MSTest, y quiero establecer en la misma categoría de prueba para todos los métodos en la clase de prueba a la vez, sin establecer TestCategory atributo para cada método individual. Cómo puede hacerse esto?

La más conveniente y de manera obvia sería establecer TestCategory atributo en la clase, pero puede ser aplicado a los métodos de sólo.

El objetivo final es omitir las pruebas de integración durante la ejecución de la prueba en TFS check-in.

  • Interesante. No creo que su posible marcar todos los métodos en la clase con el atributo trabajar con TFS pruebas. TFS entiende TestCategory y Prioridad, y estos atributos sólo método específico. Puede mover las pruebas de integración para proyecto independiente y punto de TFS no para ejecutarlo.
  • Podría separar su unidad pruebas de integración y en dos montajes diferentes y, a continuación, configurar su construcción en consecuencia?
  • Bueno, tenemos docenas de bibliotecas y de cada uno de ellos tiene una prueba correspondiente de la biblioteca, que puede contener tanto – pruebas de integración y unidad. La división de cada uno de ellos en una biblioteca por unidad y una biblioteca para la prueba de integración es posible, pero no parece el método más elegante.
  • Lo más cerca que se puede obtener es la definición de las categorías como const cadenas, pero usted todavía tiene que cambiar todos los atributos de forma manual, por ejemplo: [TestCategory(INTEGRATION)]
  • Si usted está utilizando soy AOP marco como PostSharp, se podría aprovechar para inyectar los atributos que desea en cada método (tal vez mire un atributo de la suya a nivel de clase y traducirlo a TestCategory en el método de nivel). He t bellas esto para el atributo de Descripción y funcionó bien (aunque yo estaba usando NUnit).
InformationsquelleAutor alex | 2013-04-04

6 Comentarios

  1. 5

    He estado tratando de hacer algo similar, y he llegado a una solución que funciona muy bien para mis propósitos.

    Esto no no resolver el problema de la aplicación de un TestCategory en cada clase, pero puede utilizar el /test: argumento de línea de comandos para mstest para especificar una cadena de búsqueda para que coincida con cualquier parte de la totalmente calificado nombre de método de la prueba. Eso significa que usted puede generalmente coinciden en contra de la clase, o el espacio de nombres, o lo que sea de la cadena de búsqueda puede llegar a que coincidirá con el objetivo de las pruebas. Y si no lo hace, usted puede utilizar el /test: argumento varias veces. I. e:

    > mstest /testcontainer:My.dll /test:My.FullyQualified.Namespace 
        /test:My.FullyQualified.OtherNamespace.OtherClass

    Más Info

    Edición:

    La adición de la TestCategory atributo en el nivel de clase, está ahora disponible con MSTest V2, como se señaló en NomadeNumerique la respuesta a continuación. Detalles

  2. 4

    El objetivo final es omitir las pruebas de integración durante la ejecución de la prueba en TFS
    el check-in.

    Hay otras maneras de hacer esto. En su TFS construye, se puede establecer que la unidad de pruebas que desea ejecutar, dependiendo de su nombre de ensamblado.

    Como el comportamiento por defecto, se ejecuta todas las pruebas de unidad en las asambleas que han «prueba» en su nombre. Una solución sencilla sería la de cambiar el nombre de las pruebas de integración a algo que no incluye el «test».


    Si usted desea utilizar el categorías, se puede intentar el uso de AOP. Por ejemplo, con Postsharp, usted puede crear un aspecto en su prueba de integración de la asamblea que pone el atributo en el método de. A continuación, habilitar el aspecto de todos los métodos públicos en la integración de la asamblea si todas las pruebas se agrupan en una dll o en cada una de las pruebas de integración de la clase.

  3. 2

    Una forma de superar esta limitación es para poner a la categoría de prueba en el comienzo de cada método de prueba. Por ejemplo, el nombre de su unidad de pruebas

    public void UnitTestDoSomething_ExpectThis()

    y su integración prueba de

    public void IntegrationTestDoSomething_ExpectThis()

    A continuación, cuando usted hace su TFS consulta para obtener las pruebas de integración se puede hacer

    Field[Automated Test Name] with Operator[Contains] and Value[IntegrationTest]

    Aunque esta no es una solución perfecta, que le ayudará a distinguir sus pruebas en el código y en TFS. Alternativamente, usted puede mirar en el área e iteración de caminos.

    • Pero, ¿qué hacer con varias categorías?
  4. 2

    Puede agrupar por «nombre de la Clase» a Prueba de panel del Explorador.

    Con la prueba TestCategory atributo usted no puede resolver su problema sólo porque atributos en C# son los meta-datos y no pueden ser utilizados como valores dinámicos.

  5. 1

    En el VS de 2017 esto es posible (y que parece ser parte de VS2012 update 1).

    Usted puede poner [TestCategory(«Integración»)] en una clase en la unidad de la prueba y tiene que aplicar a todas las pruebas, y asimismo [TestCategory(«Unidad»)] en la unidad de la clase de prueba.

    Entonces puede utilizar el Explorador de la Prueba de la barra de Búsqueda para filtrar por Rasgo nombre = la Unidad y la «Ejecutar Todos» sólo se ejecutarán las pruebas que coincidan con su búsqueda.

    Cuando vayas a ejecutar estas pruebas en el servidor de compilación, puede utilizar un interruptor similares /categoría:Unidad de sólo ejecutar las pruebas unitarias.

    • Otras respuestas son viejos, si usted usa VS 2017 o más reciente que usted debe seguir con esta respuesta

Dejar respuesta

Please enter your comment!
Please enter your name here