Generar pruebas unitarias para el código con IntelliTestGenerate unit tests for your code with IntelliTest

IntelliTest explora el código .NET para generar datos de prueba y un conjunto de pruebas unitarias.IntelliTest explores your .NET code to generate test data and a suite of unit tests. Para cada instrucción en el código, se genera una entrada de prueba que ejecutará esa instrucción.For every statement in the code, a test input is generated that will execute that statement. Se lleva a cabo un análisis de caso para cada bifurcación condicional en el código.A case analysis is performed for every conditional branch in the code. Por ejemplo, se analizan las instrucciones if, las aserciones y todas las operaciones que pueden producir excepciones.For example, if statements, assertions, and all operations that can throw exceptions are analyzed. Con este análisis puede generar los datos de pruebas que deben usarse en una prueba unitaria parametrizada para cada método. También crea pruebas unitarias con una cobertura de código elevada.This analysis is used to generate test data for a parameterized unit test for each of your methods, creating unit tests with high code coverage.

Cuando ejecuta Intelltest, puede ver fácilmente qué pruebas son las que fallan y agregar cualquier código para corregirlas.When you run IntelliTest, you can easily see which tests are failing and add any necessary code to fix them. Puede seleccionar las pruebas generadas que quiere guardar en un proyecto de prueba para proporcionar un conjunto de regresión.You can select which of the generated tests to save into a test project to provide a regression suite. Cuando cambie el código, vuelva a ejecutar IntelliTest para mantener sincronizadas las pruebas generadas con los cambios de código.As you change your code, rerun IntelliTest to keep the generated tests in sync with your code changes.

Disponibilidad y extensionesAvailability and extensions

Los comandos de menú Crear IntelliTest y Ejecutar IntelliTest:The Create IntelliTest and Run IntelliTest menu commands:

  • Solo están disponibles en la edición Enterprise de Visual Studio 2015 y versiones posteriores.Are available in only the Enterprise Edition of Visual Studio 2015 and later.

  • Solo admiten código de C# que tenga como destino .NET Framework.Support only C# code that targets the .NET Framework.

  • Son extensibles y admiten la emisión de pruebas en formato MSTest, MSTest V2, NUnit y xUnit.Are extensible, and support emitting tests in MSTest, MSTest V2, NUnit, xUnit format.

  • No admiten la configuración x64.Do not support x64 configuration.

Explorar: use IntelliTest para explorar el código y generar pruebas unitariasExplore: Use IntelliTest to explore your code and generate unit tests

Para generar las pruebas unitarias, los tipos deben ser públicos.To generate unit tests, your types must be public. De lo contrario, cree pruebas unitarias primero antes de generarlos.Otherwise, create unit tests first before you generate them.

  1. Abra su solución en Visual Studio.Open your solution in Visual Studio. Luego, abra el archivo de clase que tiene los métodos que desea probar.Then open the class file that has methods you want to test.

  2. Haga clic con el botón derecho en un método del código y genere las pruebas unitarias para el código del método haciendo clic en Ejecutar IntelliTest .Right-click in a method in your code and choose Run IntelliTest to generate unit tests for the code in your method.

    Haga clic con el botón derecho sobre su método para generar pruebas unitariasRight-click in your method to generate unit tests

    IntelliTest ejecuta el código muchas veces con diferentes entradas.IntelliTest runs your code many times with different inputs. Cada ejecución se representa en la tabla que muestra los datos de las pruebas entrantes y la salida o excepción resultante.Each run is represented in the table showing the input test data and the resulting output or exception.

    La ventana de Resultados de exploración se muestra con las pruebasExploration Results window is displayed with tests

    Para generar pruebas unitarias para todos los métodos públicos en una clase, simplemente haga clic con el botón secundario en la clase en lugar del método específico.To generate unit tests for all the public methods in a class, simply right-click in the class rather than a specific method. A continuación, elija Ejecutar IntelliTest.Then choose Run IntelliTest. Use la lista desplegable en la ventana Resultados de exploración para visualizar las pruebas unitarias y los datos entrantes para cada método en la clase.Use the drop-down list in the Exploration Results window to display the unit tests and the input data for each method in the class.

    Seleccione los resultados de las pruebas para ver en la listaSelect the test results to view from the list

    En cuanto a las pruebas superadas, compruebe que los resultados de los cuales se informa en la columna de resultados coincidan con sus expectativas con respecto a su código.For tests that pass, check that the reported results in the result column match your expectations for your code. Si algunas pruebas generan un error, corrija el código según corresponda.For tests that fail, fix your code as appropriate. Después vuelva a ejecutar IntelliTest para validar las correcciones.Then rerun IntelliTest to validate the fixes.

Persistir: guarde las pruebas unitarias como un conjunto de regresiónPersist: Save the unit tests as a regression suite

  1. Seleccione las filas de datos que desea guardar con la prueba unitaria parametrizada en un proyecto de pruebas.Select the data rows that you want to save with the parameterized unit test into a test project.

    Seleccione las pruebas, haga clic con el botón derecho y seleccione GuardarSelect tests; right-click and choose Save

    Puede ver el proyecto de prueba y la prueba unitaria parametrizada que se ha creado: las pruebas unitarias individuales correspondientes a cada una de las filas se guardan en el archivo .g.cs del proyecto de prueba y, la prueba unitaria parametrizada, en el archivo .cs correspondiente.You can view the test project and the parameterized unit test that has been created - the individual unit tests, corresponding to each of the rows, are saved in the .g.cs file in the test project, and a parameterized unit test is saved in its corresponding .cs file. Puede ejecutar las pruebas unitarias y ver los resultados desde el Explorador de pruebas, tal como lo haría con cualquier prueba unitaria que haya creado manualmente.You can run the unit tests and view the results from Test Explorer just as you would for any unit tests that you created manually.

    Abra el archivo de clase en método de prueba para ver la prueba unitariaOpen class file in test method to view unit test

    También se agregan al proyecto de pruebas todas las referencias necesarias.Any necessary references are also added to the test project.

    Si el código del método cambia, vuelva a ejecutar IntelliTest para mantener sincronizadas las pruebas unitarias con los cambios.If the method code changes, rerun IntelliTest to keep the unit tests in sync with the changes.

Ayudar: use IntelliTest para centrarse en la exploración del códigoAssist: Use IntelliTest to focus code exploration

  1. Si el código es más complejo, IntelliTest le facilitará la exploración.If you have more complex code, IntelliTest assists you with focusing exploration of your code. Por ejemplo, si un método tiene una interfaz como parámetro y varias clases implementan dicha interfaz, IntelliTest descubre esas clases y notifica una advertencia.For example, if you have a method that has an interface as a parameter, and there is more than one class that implements that interface, IntelliTest discovers those classes and reports a warning.

    Vea las advertencias para decidir qué quiere hacer.View the warnings to decide what you want to do.

    Vea las advertenciasView warnings

  2. Tras investigar el código e identificar qué desea probar, puede corregir la advertencia para elegir las clases con las que se debe probar la interfaz.After you investigate the code and understand what you want to test, you can fix the warning to choose which classes to use to test the interface.

    Haga clic con el botón derecho sobre la advertencia y seleccione CorregirRight-click the warning and choose Fix

    Esta opción se agrega en el archivo PexAssemblyInfo.cs.This choice is added into the PexAssemblyInfo.cs file.

    [assembly: PexUseType(typeof(Camera))]

  3. Ahora puede volver a ejecutar IntelliTest para generar una prueba unitaria parametrizada y datos de pruebas, solo con el uso de la clase que corrigió.Now you can rerun IntelliTest to generate a parameterized unit test and test data just using the class that you fixed.

    Vuelva a ejecutar IntelliTest para generar los datos de pruebaRerun IntelliTest to generate the test data

Especificar: use IntelliTest para validar las propiedades de corrección especificadas en el códigoSpecify: Use IntelliTest to validate correctness properties that you specify in code

Especifique la relación general entre entradas y salidas que deben validar las pruebas unitarias generadas.Specify the general relationship between inputs and outputs that you want the generated unit tests to validate. Esta especificación se encapsula en un método similar a un método de prueba, aunque está cuantificado de forma universal.This specification is encapsulated in a method that looks like a test method but is universally quantified. Este es el método de prueba unitaria parametrizada. Las aserciones que se realicen deberán resultar válidas para todos los valores de entrada posibles que IntelliTest pueda generar.This is the parameterized unit test method, and any assertions you make must hold for all possible input values that IntelliTest can generate.

P: ¿Se puede usar IntelliTest para código no administrado?Q: Can you use IntelliTest for unmanaged code?

R: No, IntelliTest solo funciona con código administrado.A: No, IntelliTest only works with managed code.

P: ¿Cuándo se supera o falla una prueba generada?Q: When does a generated test pass or fail?

R: Se supera al igual que otras pruebas unitarias, es decir, si no ocurre ninguna excepción.A: It passes like any other unit test if no exceptions occur. Falla si se produce un error de aserción o si el código que se prueba detecta una excepción no controlada.It fails if any assertion fails, or if the code under test throws an unhandled exception.

Si tiene una prueba que puede superarse si se detectan determinadas excepciones, puede establecer uno de los siguientes atributos según sus requisitos en el método de prueba, clase de prueba o nivel de ensamblado:If you have a test that can pass if certain exceptions are thrown, you can set one of the following attributes based on your requirements at the test method, test class or assembly level:

  • PexAllowedExceptionAttributePexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttributePexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttributePexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttributePexAllowedExceptionFromAssemblyAttribute

P: ¿Puedo agregar suposiciones a la prueba unitaria parametrizada?Q: Can I add assumptions to the parameterized unit test?

R: Sí. Use suposiciones para especificar los datos de pruebas que no se necesitan para la prueba unitaria para un método específico.A: Yes, use assumptions to specify which test data is not required for the unit test for a specific method. Use la clase PexAssume para agregar hipótesis.Use the PexAssume class to add assumptions. Por ejemplo, puede agregar una suposición en que la variable de longitud no sea nula como esta.For example, you can add an assumption that the lengths variable is not null like this.

PexAssume.IsNotNull(lengths);

Si agrega una suposición y vuelve a ejecutar IntelliTest, pueden eliminarse los datos de pruebas que ya no son relevantes.If you add an assumption and rerun IntelliTest, the test data that is no longer relevant will be removed.

P: ¿Puedo agregar aserciones a la prueba unitaria parametrizada?Q: Can I add assertions to the parameterized unit test?

R: Sí. IntelliTest comprobará que las aserciones de su instrucción sean realmente correctas cuando ejecute las pruebas unitarias.A: Yes, IntelliTest will check that what you are asserting in your statement is in fact correct when it runs the unit tests. Use la clase PexAssert o la API de aserción que se incluye en el marco de pruebas para agregar aserciones.Use the PexAssert class or the assertion API that comes with the test framework to add assertions. Por ejemplo, puede agregar una aserción de que dos variables son iguales.For example, you can add an assertion that two variables are equal.

PexAssert.AreEqual(a, b);

Si agrega una aserción y vuelve a ejecutar IntelliTest, este comprobará que su aserción sea válida o, en caso contrario, la prueba fallará.If you add an assertion and rerun IntelliTest, it will check that your assertion is valid and the test fails if it is not.

P: ¿puedo generar pruebas unitarias con parámetros sin ejecutar primero IntelliTest?Q: Can I generate parameterized unit tests without running IntelliTest first?

A: Sí, haga clic con el botón secundario en la clase o método y elija crear IntelliTest.A: Yes, right-click in the class or method, then choose Create IntelliTest.

Haga clic con el botón derecho en editor y elija Crear IntelliTestRight-click editor, choose Create IntelliTest

Acepte el formato predeterminado para generar las pruebas o cambie la denominación del proyecto y las pruebas.Accept the default format to generate your tests, or change how your project and tests are named. Puede crear un nuevo proyecto de prueba o guardar las pruebas en un proyecto existente.You can create a new test project or save your tests to an existing project.

Cree IntelliTest con MSTest predeterminadoCreate IntelliTest with MSTest default

P: ¿Puedo usar otros marcos de pruebas unitarias con IntelliTest?Q: Can I use other unit test frameworks with IntelliTest?

A: Sí, siga estos pasos para buscar e instalar otros marcos.A: Yes, follow these steps to find and install other frameworks. Las extensiones de marcos de pruebas también están disponibles en Visual Studio Marketplace:Test framework extensions are also available in Visual Studio Marketplace:

Después de reiniciar Visual Studio y volver a abrir la solución, haga clic con el botón secundario en la clase o método y elija Crear IntelliTest.After you restart Visual Studio and reopen your solution, right-click in the class or method, then choose Create IntelliTest. Seleccione su marco instalado aquí:Select your installed framework here:

Seleccione otro marco de pruebas unitarias para IntelliTestSelect other unit test framework for IntelliTest

A continuación, ejecute IntelliTest para generar pruebas unitarias individuales en sus correspondientes archivos .g.cs.Then run IntelliTest to generate individual unit tests in their corresponding .g.cs files.

P: ¿Puedo obtener más información acerca de cómo se generan las pruebas?Q: Can I learn more about how the tests are generated?

A: Sí, para obtener una visión general, lea esta publicación de blog.A: Yes, to get a high-level overview, read this blog post.