c# - tutorial - ¿Cómo realiza la prueba unitaria de un controlador Core o de un objeto modelo de ASP.NET?
introducción a asp.net core pdf (3)
Estoy tratando de obtener algunas clases de C # de controlador, modelo y repositorio (acceso a datos) bajo prueba de unidad, en Visual Studio 2015, con ASP.NET Core MVC (ASP.NET 5 durante la vista previa, ahora llamada ASP.Net Core) .
Tengo la siguiente estructura:
Solution
|
src
|
|-- ITConsole <- main app (ASP.NET MVC, DNX 4.5.1)
|
`-- ITConsoleTests <- What kind of project should this be?
MainApp está usando DNX 4.5.1, pero parece que si creo una aplicación de prueba estándar nUnit Unit, solo está disponible como una biblioteca de clases clásica de .NET Framework, dirigida a .NET Framework 4.5.2, no como una biblioteca de clases web que Puedo trabajar con mi aplicación principal.
Por lo tanto, en caso de que funcione como un clásico .NET framework Microsoft Unit Test framework project (ensamblaje .net), traté de buscar y agregar referencias manualmente (mediante la adición de referencias y la navegación) para resolver las dependencias de .NET. Soy consciente de que las referencias de ensamblado de .NET son tristemente no transitivas. Entonces, si UnitTest.dll tiene una referencia a MainApp.dll, y MainApp.dll depende de ASP.NET MVC, y de todo lo demás de lo que depende, tengo que hacerlo yo mismo. Eso es lo que estoy tratando de hacer. C:/dev/Demo/ITConsole/artifacts/bin/ITConsole/Debug/dnx451/ITConsole.dll
una referencia a C:/dev/Demo/ITConsole/artifacts/bin/ITConsole/Debug/dnx451/ITConsole.dll
en mi proyecto de prueba de unidad para que pueda comenzar a compilar el código. Las clases de prueba de unidad se compilan pero no se ejecutan, probablemente debido al problema de intentar agregar una referencia a ASP.NET.
En este momento, aunque he agregado una referencia a Common.Logging.Core y Common.Logging, cuando hago clic en "Ejecutar todo" en el explorador de pruebas, aparece este error:
Test Name: TestStudyLogReadDocument
Test FullName: ITConsoleTests.ITConsoleTestStudyLog.TestStudyLogReadDocument
Test Source: C:/dev/Demo/ITConsole/ITConsoleTests/ITConsoleTestStudyLog.cs : line 52
Test Outcome: Failed
Test Duration: 0:00:00.0712058
Result StackTrace:
at Couchbase.Configuration.Client.ClientConfiguration..ctor()
at ITConsole.Repository.StudyLogRepository..ctor() in C:/dev/Demo/ITConsole/src/ITConsole/Repository/StudyLogRepository.cs:line 39
at ITConsoleTests.ITConsoleTestStudyLog.SetupDb() in C:/dev/Demo/ITConsole/ITConsoleTests/ITConsoleTestStudyLog.cs:line 30
at ITConsoleTests.ITConsoleTestStudyLog.TestStudyLogReadDocument() in C:/dev/Demo/ITConsole/ITConsoleTests/ITConsoleTestStudyLog.cs:line 53
Result Message:
Test method ITConsoleTests.ITConsoleTestStudyLog.TestStudyLogReadDocument threw exception:
System.IO.FileLoadException: Could not load file or assembly ''Common.Logging.Core, Version=3.1.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e'' or one of its dependencies. The located assembly''s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
(En el momento en que se hizo esta pregunta ...) Ninguna de las plantillas de vista previa de 5 mvc de asp.net puede generar pruebas unitarias para usted. ¿Puede incluso probar una nueva y brillante aplicación ASP.NET Core? Vea la captura de pantalla a continuación, por ejemplo, de cómo la forma normal en que comenzó la prueba de unidad no está disponible en VS 2015 con MSTEST.
ACTUALIZACIÓN: XUnit sigue siendo una gran idea, pero esta respuesta no está actualizada ahora porque también puede usar el MSTEST "estándar" si lo desea con el núcleo de ASP.NET . (1 de junio de 2016) Sigo prefiriendo XUnit, pero es su decisión.
ENLACE DE INSTRUCCIONES XUNIT MÁS RECIENTES: las instrucciones excelentes que pueden actualizarse con más frecuencia que esta respuesta se encuentran en la wiki de xUnit.
IDE SOLUCIÓN DE TRABAJO: encuentre y elimine manualmente %TEMP%/VisualStudioTestExplorerExtensions
cuando Visual Studio se vuelve estúpido y no "detectará" ni le mostrará sus pruebas.
A partir de mayo de 2016, con ASP.NET Core RC1 superado recientemente por RC2, todavía no parece posible utilizar el marco estándar de Microsoft Unit Test con ASP.NET Core (anteriormente ASP.NET 5), y XUnit parece ser un Buena opción para RC1 y RC2.
Puede hacer que las pruebas unitarias de XUnit.net funcionen con ASP.NET Core 1.0.0-RC1, usando las instrucciones oficiales] 2 en el proyecto XUnit github que tiene un caso específico de ".net core getting started".
También puede instalar la nueva plantilla de proyecto XUnit que proporciona un proyecto de prueba de unidad con plantillas para el núcleo completo .net y .net regular. Haga clic en Herramientas y luego en Tipo de extensiones y actualizaciones en XUnit, busque la UNIDAD de prueba del proyecto de la Unidad e instale la PLANTILLA. NO INSTALE NINGÚN XUNIT TEST RUNNER, NO LO NECESITA.
He creado una muestra de trabajo y la he cargado en bitbucket:
https://bitbucket.org/wpostma/aspnet5mvc6xunitdemo
Si no tienes mercurial, puedes descargar un zip desde bitbucket.
La demostración incluye una prueba que pasa y una prueba que falla.
El resumen rápido:
Tiene Visual Studio 2015, incluyendo Update2 y las herramientas de "vista previa 1.0.0" (más recientes desde mayo de 2016).
Cree una biblioteca de clases web NO un proyecto de prueba de unidad.
Agregue referencias de XUnit a él y arregle su project.json (ejemplo a continuación).
Escribe tu clase (ejemplo abajo).
Ejecute las pruebas con el Explorador de pruebas dentro de ide, o ide fuera, escriba
dnx . tests
dnx . tests
y examina la salida (ejemplo abajo).
project.json para 1.0.0-rc2 con referencia a un conjunto de demostración y xunit:
{
"version": "1.0.0-*",
"testRunner": "xunit",
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0-rc2-3002702",
"type": "platform"
},
"dotnet-test-xunit": "1.0.0-rc2-*",
"xunit": "2.1.0",
"YetAnotherWebbyDemo": "1.0.0-*"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"dnxcore50",
"portable-net45+win8"
]
}
}
}
Prueba de unidad de clase (lo que sea.cs):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
using YetAnotherWebbyDemo.Models;
namespace YetAnotherWebbyDemoTests
{
// This project can output the Class library as a NuGet Package.
// To enable this option, right-click on the project and select the Properties menu item. In the Build tab select "Produce outputs on build".
public class TestBasics
{
[Fact]
public void TestAdd()
{
TestableModelClass TestMe = new TestableModelClass();
Assert.True(TestMe.Add(3, 2) == 5, "Basic Math Failure");
Assert.True(TestMe.Add(-3, -2) == -5, "Basic Math Failure");
}
}
}
Ejemplo de salida de línea de comandos en RC1 cuando usamos dnx:
C:/dev/Demo/YetAnotherWebbyDemo/src/YetAnotherWebbyDemoTests>dnx . test
xUnit.net DNX Runner (32-bit DNX 4.5.1)
Discovering: YetAnotherWebbyDemoTests
Discovered: YetAnotherWebbyDemoTests
Starting: YetAnotherWebbyDemoTests
YetAnotherWebbyDemoTests.TestBasics.TestAdd [FAIL]
Basic Math Failure
Expected: True
Actual: False
Stack Trace:
YetAnotherWebbyDemoTestBasics.cs(25,0): at YetAnotherWebbyDemoTests.Test
Basics.TestAdd()
Finished: YetAnotherWebbyDemoTests
=== TEST EXECUTION SUMMARY ===
YetAnotherWebbyDemoTests Total: 1, Errors: 0, Failed: 1, Skipped: 0, Time: 0.263s
Ejemplo de salida en RC2 donde estamos usando dotnet
:
D:/dev/aspnet5mvc6xunitdemo/src/YetAnotherWebbyDemoTests>dotnet test
Project YetAnotherWebbyDemo (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Project YetAnotherWebbyDemoTests (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
xUnit.net .NET CLI test runner (64-bit win10-x64)
Discovering: YetAnotherWebbyDemoTests
Discovered: YetAnotherWebbyDemoTests
Starting: YetAnotherWebbyDemoTests
YetAnotherWebbyDemoTests.TestBasics.TestAdd [FAIL]
Basic Math Failure
Expected: True
Actual: False
Stack Trace:
D:/dev/aspnet5mvc6xunitdemo/src/YetAnotherWebbyDemoTests/YetAnotherWebbyDemoTestBasics.cs(26,0): at YetAnotherWebbyDemoTests.TestBasics.TestAdd()
Finished: YetAnotherWebbyDemoTests
=== TEST EXECUTION SUMMARY ===
YetAnotherWebbyDemoTests Total: 1, Errors: 0, Failed: 1, Skipped: 0, Time: 0.205s
SUMMARY: Total: 1 targets, Passed: 0, Failed: 1.
Con el lanzamiento de RC2, la integración de Xunit ya no funcionaba con mis proyectos (esto se ha corregido ahora, vea los comentarios). Para poder probar mis proyectos cambié a NUnit. Parece que es compatible con RC2 y tiene un controlador de prueba ligero NUnitLite.
Básicamente, necesitas alojar el NUnitLite en una aplicación de consola e iniciarlo con "dotnet run".
Agregue las siguientes dependencias:
"dependencies": {
"NUnit": "3.2.1",
"NUnitLite": "3.2.1",
Para iniciar el corredor de prueba, debe agregar este código en el archivo program.cs:
public class Program
{
public static void Main(string[] args)
{
new AutoRun().Execute(args);
}
}
El equipo de XUnit está haciendo un gran trabajo al actualizar su documentación.
Para tener la información siempre actualizada, consulte la documentación de Xunit en:
http://xunit.github.io/docs/getting-started-dotnet-core.html