Visual Studio 2015 o 2017 no descubre pruebas unitarias


EDITAR 2016-10-19:

La pregunta original era sobre un problema específico de VS2015 CTP6 con el xUnit test runner. Las respuestas dejan claro que hay un problema mucho más amplio con la detección de pruebas unitarias en Visual Studio que puede ocurrir en muchas situaciones diferentes. He limpiado mi pregunta para reflejar eso.

También he incluido un script en mi propia respuesta que todavía uso hasta el día de hoy para resolver problemas similares cuando aparecen.

Muchos otras respuestas también han demostrado ser útiles para comprender mejor las complejidades del VS test runner. ¡Aprecio que la gente todavía esté compartiendo sus soluciones!


Pregunta original 2015-04-10:

Desde ayer, mi Explorador de pruebas de Visual Studio no descubrirá pruebas para ninguno de mis proyectos. Tampoco muestra la barra de carga verde después de la construcción.

Cuando voy al Explorador de pruebas de Visual Studio y hago clic en "Ejecutar todo", o cuando hago clic con el botón derecho en cualquiera método de prueba y seleccione "Ejecutar pruebas", obtengo lo siguiente en mi ventana de salida:

Could not load file or assembly 'Microsoft.VisualStudio.Web.ProjectSystem, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Estoy ejecutando Visual Studio 2015 CTP 6 en Windows 10 Pro Technical Preview, build 10041. La versión de. NET Framework no parece importar - sucede en 4.0, 4.5.2 y 4.6.

Probé con los siguientes marcos de prueba y todos ellos dan el mismo comportamiento:{[13]]}

  • Microsoft.VisualStudio.QualityTools.UnitTestFramework v14.0.22609.0
  • xunit v2.1.0-beta1-build2945 con xunit.runner.visualstudio v2.1.0-beta1-build1051
  • NUnit v2.6.4 con NUnitTestAdapter v2.0.0

Encontré un problema en GitHub (xunit) que parecía ser similar: No puedo obtener pruebas descubiertas #295 , con este comentario del equipo de xunit:

Tenga en cuenta que se ha informado que Visual Studio 2015 CTP 5 está roto por muchas personas con pruebas unitarias en general (no solo xUnit.net), so no esperes que eso funcione.

Además, asegúrese de haber limpiado el corredor de Visual Studio cache. Si se corrompe, Visual El estudio se portará mal de forma permanente hasta que se borre. Para borrar la caché, apague todas las instancias de Visual Studio y, a continuación, elimine la carpeta % TEMP % \VisualStudioTestExplorerExtensions (honestamente, probablemente no haría daño eliminar todo en % TEMP% que se puede eliminar).

Probé su sugerencia de eliminar la carpeta %TEMP%\VisualStudioTestExplorerExtensions. Desafortunadamente, eso no solucionó el problema.

Me di cuenta de que ReSharper en realidad es capaz de descubrir algunas pruebas. Sólo funciona para las pruebas VS y NUnit, no para xunit.

Tiene que haber algún tipo de carpeta temporal o caché que deba borrar, pero sé que Visual Studio tiene muchos de ellos y no todos pueden eliminarse sin efectos secundarios no deseados.

Author: RobM, 2015-04-10

30 answers

Para mi sorpresa, borrar archivos temporales ubicados en el directorio %TEMP% resolvió el problema para mí.

Nota: Este camino está generalmente en C:\Users\(yourusername)\AppData\Local\Temp

Como @Warren-P incluido, puede navegar a la carpeta temp poniendo %temp% en el Menú Inicio, o inicie "Explorador de archivos" e ingrese %temp% en la barra de direcciones.

 135
Author: RobM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-05 21:19:10

Podría ser que sus códigos están compilados con x64, por lo tanto, debe habilitar la Arquitectura de Procesador Predeterminada como X64.

Test > Test Settings > Default Processor Architecture > X64
 80
Author: Dac Toan Ho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 10:48:34
  • Compruebe si NUnit Test Adapter 2/3 está instalado en VisualStudio.
    (Tools>Extensions and Updates )

  • Asegúrese de que la arquitectura del procesador correcta está elegida:
    (Test>Test Settings>Default Processor Architecture)

 57
Author: MichiBack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-19 09:04:48

EDITAR 2016-10-19 (script de PowerShell)

Este problema todavía vuelve de vez en cuando. Escribí un pequeño fragmento de PowerShell para automatizar la eliminación de la caché/carpeta temporal/archivos relevantes para mí. Lo estoy compartiendo aquí para futuros lectores:

@(
"$env:TEMP"
"$env:LOCALAPPDATA\Microsoft\UnitTest"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ComponentModelCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\Designer\ShadowCache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio\14.0\ImageLibrary\cache"
"$env:LOCALAPPDATA\Microsoft\VisualStudio Services\6.0\Cache"
"$env:LOCALAPPDATA\Microsoft\WebsiteCache"
"$env:LOCALAPPDATA\NuGet\Cache"
) |% { Remove-Item -Path $_ -Recurse -Force }

Asegúrese de cerrar Visual Studio de antemano y probablemente sea una buena idea reiniciar después.

Eliminar la carpeta TEMP puede no ser necesario y en algunos casos incluso puede ser indeseable, por lo que recomendaría intentarlo sin limpiar la carpeta TEMP primero. Simplemente omita el "$env:TEMP".

Respuesta original 2015-04-12

El problema se "resolvió" después de una limpieza exhaustiva de las carpetas temp/cache relacionadas con Visual Studio.

Dado que no tuve el tiempo para pasar por todo uno por uno y luego probar en el medio, desafortunadamente no sé cuál causó realmente el problema.

Estos son los pasos exactos que he tomado:

  1. Cerrado Visual Studio
  2. Usado CCleaner para borrar sistema y navegador temp archivos / carpetas
  3. Borró/borró manualmente los siguientes archivos/carpetas:

    • %USERPROFILE%\AppData\Local\assembly
    • %USERPROFILE%\AppData\Local\Microsoft\UnitTest
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\1033\ProjectTemplateMRU.xml
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\Designer\ShadowCache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\14.0\ImageLibrary\cache
    • %USERPROFILE%\AppData\Local\Microsoft\VisualStudio Services\6.0\Cache
    • %USERPROFILE%\AppData\Local\Microsoft\WebsiteCache
    • %USERPROFILE%\AppData\Local\NuGet\Cache
    • %USERPROFILE%\AppData\Local\Temp
 28
Author: Fred Kleuver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-19 13:54:11

Una de las razones de este problema es que su clase de prueba no es pública. MSTest solo descubre pruebas de clases públicas.

 14
Author: AfshinS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-11 02:20:36

En Visual Studio 2015(Actualización 3) si desea adjuntar las pruebas en el explorador de pruebas, debe instalar el Adaptador de prueba NUnit.Descargue el adaptador desde Herramientas->Extensión y Actualizaciones->Pestaña en línea(debe buscar el adaptador)->Descargar . Al reiniciar Visual Studio, puede ver el cambio para el marco de prueba.

 10
Author: Pankti Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-08 09:59:57

No tengo una respuesta completa a esto, pero he determinado algunas cosas jugando con un proyecto de prueba:

  1. El xunit.runner.aspnet : 2.0.0-aspnet-beta4 que parece ser parte de la versión oficial de beta4 aspnet5 no funciona en Visual Studio.
  2. En su lugar, los paquetes "xunit": "2.1.0-*" y "xunit-runner.dnx": "2.1.0-*" FUNCIONAN en Visual Studio.
  3. Para que VS descubra las pruebas, su proyecto DEBE tener un SOLO comando llamado "test" que ejecute "xunit.corredor.dnx". Agregar comandos adicionales puede romperlo.
  4. Si la ventana del Explorador de pruebas aún termina vacía, ELIMINA el comando " probar "de tu proyecto, luego vuelve a construir la solución y luego agrega el comando" probar " al proyecto.json.
  5. Borrar todas sus cachés según la sugerencia de @Fred-Kleuver puede ayudar, pero no he hecho todos los pasos de forma aislada, así que no estoy seguro.

Esto es actual según VS 2015 CTP 6, utilizando las versiones de beta4, no los diarios.

 9
Author: Avi Cherry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-14 21:50:32

Tuve una instancia en la que algunas pruebas no se recogían porque las había hechoasync como el siguiente:

public async void This_IsMy_UnitTest()

El problema fue que se me olvidó hacerles devolver un Task y no void cuando hice el cambio. Uno pensaría que esto causaría un error o una prueba fallida, pero no. Las pruebas unitarias en esa clase fueron completamente ignoradas y actuaron como si no existieran.

No fue después de aproximadamente 3 limpia y construye + reiniciar VS.NET que vi correr la prueba y fallar indicando que olvidé agregar el tipo de retorno Task:

public async Task This_IsMy_UnitTest()

Después de la actualización, las pruebas unitarias se encontraron y funcionaron correctamente. Este podría ser un caso de borde, pero tener async pruebas para usar await dentro pero no tener la firma correcta puede causar este mismo problema y no es la primera vez que he hecho esto.

 9
Author: atconway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-05 23:13:49

Vaya al administrador de paquetes Nuget y descargue el adaptador Nunit de la siguiente manera.

introduzca la descripción de la imagen aquí

 6
Author: Debendra Dash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-28 15:22:05

Tenía el mismo pronlem pero la carpeta "%TEMP%\VisualStudioTestExplorerExtensions" no existía en mi máquina, así que mientras leía las publicaciones tuve la idea de crearla y funciona. El explorador de pruebas ahora puede mostrar todas mis pruebas. Gracias.

 5
Author: Vinci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-07 11:01:21

La solución en mi caso fue instalar la extensión NUnit 3 Test Adapter a mi Visual Studio 2015.

'Extensiones y Actualizaciones' está presente en "Herramientas", meue

 5
Author: Umar T.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-28 10:07:57

En mi caso (Visual Studio Enterprise 2015 14.0.25425.01 Update 3, Resharper 2016.2) solo necesitaba hacer una solución limpia desde el menú de compilación. Reconstruyendo la solución, haga que el explorador de pruebas "se despierte" y encuentre todas las pruebas de nuevo.

 4
Author: sammy34,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-11 06:07:18

Simplemente reinicie Visual Studio y en el Explorador de pruebas haga "Ejecutar todo" ... Todas mis pruebas son descubiertas entonces.

 4
Author: lukyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-23 11:18:21

En mi caso, el problema era "entre la silla y el teclado". Había cambiado a una configuración en el Administrador de configuración que no incluía mis proyectos de prueba unitaria en la compilación. Se ha solucionado el problema al volver a una configuración (por ejemplo, Depuración) que incluye todos los proyectos.

 3
Author: AndyZez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-03 19:56:03

En mi caso, MSTest bajo VS 2015 ignoraba las pruebas con nombres de prueba (es decir, métodos) que tenían más de 174 caracteres. Acortar el nombre permitió que la prueba fuera visible. Esto se determinó a través de adivinar y verificar manipulando el nombre de la prueba.

 3
Author: Kenneth K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-04 20:38:06

Esto probablemente no ayudará a la mayoría de las personas, pero alguien sin experiencia en pruebas unitarias había escrito un método de prueba que devolvió bool en lugar de void:

[TestMethod]
public bool TestSomething()

Cambiando el tipo de retorno a void solucionado el problema.

 3
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-30 04:12:08

Asegúrese de tener xunit.runner.visualstudio paquete en sus paquetes de proyecto de prueba.config y también que fue correctamente restaurado.

Sé que este no fue el caso de la pregunta original, sin embargo, podría ahorrar tiempo para alguien como yo.

 3
Author: pvasek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-09 15:59:43

Me gustaría añadir que encontré una solución completamente diferente a las anteriores.

Había declarado mi clase de prueba de la siguiente manera:

[TestClass]
class ClassificationTests
{
   //unit tests
}

Tan pronto como agregué el modificador public a la clase, ¡funcionó como se esperaba!

 3
Author: Persistence,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-10 17:55:06

Si está apuntando a.NET Standard o. NET Core, debe usar el paquete NuGet para el adaptador de prueba NUnit y no la extensión.

Se recomienda instalar el adaptador desde NuGet si está probando proyectos.NET Core o. NET Standard. El adaptador VSIX no admite, ni admitirá,. NET Core porque los paquetes VSIX no pueden dirigirse a varias plataformas.

Fuente: NUnit GitHub Wiki

.

También consulte las preguntas frecuentes hay:

¿Mis pruebas no aparecen en Visual Studio 2017?

  • ¿Está utilizando el paquete NuGet?
  • ¿Está utilizando la versión 3.8.0 o posterior del paquete NuGet?
  • ¿Sus pruebas se dirigen a. NET Core o a. NET Framework completo? (véase supra)
  • Ha añadido un Paquete de Referencia a Microsoft.NET.Prueba.Sdk?
  • ¿Ha reiniciado Visual Studio? Todavía es un poco temperamental.

Fuente: NUnit GitHub Wiki

 2
Author: m93a,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-23 16:50:31

Apareciendo para compartir mi solución. Yo estaba en Windows 10, Visual Studio 2015, NUnit 3.5, Adaptador de prueba NUnit 3.6 (a través de NuGet, no la extensión VISX) y ninguna de mis pruebas fueron descubiertas. Mi problema era que en el proyecto Tests de mi solución, de alguna manera se había creado un acceso directo a mi carpeta "Documentos" dentro de la carpeta del proyecto. Supongo que el adaptador de prueba estaba viendo el atajo y se colgó tratando de averiguar qué hacer con él, lo que resultó en el fallo de la unidad de visualización prueba.

 1
Author: Thomas Parikka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-15 19:57:27

Eliminar el archivo \AppData\Local\Microsoft\VisualStudio\14.0\1033\SpecificFolderCache.xml resolvió el problema para mí.

 1
Author: der_chirurg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-27 11:13:12

También me mordió esta pequeña característica maravillosa y nada de lo descrito aquí funcionó para mí. No fue hasta que comprobé dos veces el resultado de la compilación y noté que los proyectos pertinentes no se estaban construyendo. Una visita a configuration Manager confirmó mis sospechas.

Visual Studio 2015 me había permitido agregar nuevos proyectos, pero decidió que no valía la pena construirlos. Una vez que agregué los proyectos a la compilación, comenzó a jugar muy bien.

 1
Author: Robbie Dee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-28 16:28:43

Lo resolví cambiando X64 a : Haga clic derecho en proyecto - > Propiedades -> Construir -> Destino de plataforma - > Cualquier CPU

 1
Author: Pouyan Sepahvand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-27 04:23:19

De alguna manera mi proyecto fue configurado para compilar como una Biblioteca estática (.lib) . Después de cambiar esto a una Biblioteca dinámica (.dll), las pruebas fueron descubiertas correctamente por Visual Studio 2012.

My Unit Test Project ->
Properties ->
Configuration Properties ->
General ->
Configuration Type
 1
Author: Maate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-05 17:39:39

Esto me sucedió porque mi proyecto de prueba contenía un app.config. Fue agregado automáticamente por paquetes NuGet para la redirección de ensamblado, pero mis pruebas parecían funcionar bien sin él.

Véase: https://developercommunity.visualstudio.com/comments/42858/view.html .

 1
Author: Ohad Schneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-26 15:51:20

Fue tan fácil para mí solucionar el problema como:

  • Seleccione su Proyecto de Prueba Unitaria
  • Haga clic en el botón 'Mostrar todos los archivos' en el Explorador de soluciones y aparecerán nuevos archivos temporales en el árbol de archivos del Explorador de soluciones dentro de 'obj\x86\Debug'.
  • Elimine estos archivos temporales y reconstruya el proyecto.
  • Volvió a intentar ejecutar pruebas y trabajó!.
 1
Author: mggSoft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-26 12:14:01

Yo tenía el mismo problema. Acabo de limpiar y reconstruir el proyecto y pude ver las pruebas que faltaban.

 0
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-22 19:43:05

Estaba luchando con el mismo problema para VSTest framework y mis pruebas unitarias nativas.

Entonces, después de hacer todas esas cosas que mencionaste antes, eliminé cada ocurrencia del símbolo '#' en la ruta del directorio de mi solución. Realmente funciona.

Lo dejo aquí para los googlers que encontrarán esta pregunta en el futuro.

 0
Author: Luke nullptr Krupa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-29 12:38:10

Este tema está algo desactualizado, pero mi solución al estado de prueba faltante en VS2015:

El task-status solo aparece en la configuración de depuración. Por supuesto, esto también hace que sea imposible depurar su prueba a través del explorador de pruebas.

 0
Author: pehur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-01 20:53:27

Asegúrese de que su clase con el [TestClass] atributo public y no private.

 0
Author: alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-18 19:53:54