Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

403
Vistas
Excepción "El identificador no es válido" en el ejecutor de pruebas de Visual Studio 2015

Descubrí que una de mis pruebas que pasa en VS2013 está fallando en VS2015, la prueba llama a un servicio que incluye, entre otras cosas, una llamada a Console.Clear();

para saber qué está pasando hice una prueba unitaria simple

 [TestMethod] public void ExampleTest() { Console.Clear(); }

Esta prueba pasa en Visual Studio 2013 pero en 2015 me sale el siguiente error:

Nombre de la prueba: Prueba de ejemplo Nombre completo de la prueba: solución.Común.Prueba.CacheManagerTest.ExampleTest Origen de la prueba: C:\solution.Common.Test\CacheManagerTest.cs: línea 34 Resultado de la prueba: Error Duración de la prueba: 0:00:00.3015003

Resultado StackTrace: en System.IO.__Error.WinIOError(Int32 errorCode, String mayFullPath) en System.Console.GetBufferInfo(Boolean throwOnNoConsole, Boolean& Successed) en System.Console.Clear()
en sol.Common.Test.CacheManagerTest.ExampleTest() en C:\solution.Common.Test\CacheManagerTest.cs:line 35 Mensaje de resultado:
El método de prueba Alexandria.Common.Test.CacheManagerTest.ExampleTest generó una excepción: System.IO.IOException: el identificador no es válido.

Entiendo que es un mal diseño que mi servicio falle si no lo llama una consola. La razón por la que hago esta pregunta es para entender por qué esto falla en la nueva versión de Visual Studio. ¿Es este el comportamiento previsto? ¿Qué cambió?

No vi nada obvio en el registro de cambios que pareciera estar relacionado con esto.

Editar: estoy llamando a Console.clear desde el siguiente dll

Microsoft\Framework.NETFramework\v4.5.1\mscorlib.dll

Edición 2:

imagen de las propiedades del proyecto de prueba en ambos estudios visuales ambos estudios visuales

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los cambios en VS2015 son bastante visibles, use Prueba> Depurar> Todas las pruebas para obtener información. Puede ver que ahora tiene un nuevo proceso de host de prueba, su nombre es TE.ProcessHost.Managed.exe , almacenado en C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow directorio.

Las versiones anteriores de VS usaban un host diferente, vstest.executionengine.exe. Un cambio notable en el nuevo host de prueba es que ya no es un programa en modo consola. Algo que puede ver ejecutando Dumpbin.exe /headers en el exe.

Otra forma de ver el problema subyacente es con el Administrador de tareas. Tenga en cuenta cómo ejecutar una prueba en una versión anterior de VS hace que se agregue un proceso conhost.exe . Este es el proceso que posee la ventana de la consola para una aplicación en modo consola. Un problema que he visto antes es que este proceso tiende a filtrarse y no termina cuando se completa la prueba. Agregando cada vez más instancias de conhost.exe, en un momento investigando este problema, tenía 12 de ellas ejecutándose. Presumiblemente, los cambios en VS2015 estaban destinados a abordar ese problema.

Técnicamente, puede configurar la prueba unitaria con un archivo .runsettings y usar el elemento <ForcedLegacyMode> para forzar el uso del antiguo proceso de host de prueba. Sin embargo, esto no tiene efecto en el resultado de esta prueba, parece que lo abordaron de varias maneras.

Eso es una buena cantidad de suposiciones, le recomiendo que use connect.microsoft.com para presentar un informe de comentarios. Puede citar este Q+A como referencia.


Mientras tanto, puede considerar una solución alternativa. Tenga en cuenta que Console.Clear() es en general un creador de problemas, también fallará en el uso normal cuando se redirige la salida de una aplicación en modo consola. Muy fácil de hacer desde una línea de comandos con el operador > . Cuál es la razón última por la que falla en una prueba unitaria. Querrá hacer que el código sea resistente para que pueda funcionar correctamente tanto en producción como en una prueba unitaria. Me gusta esto:

 if (!Console.IsOutputRedirected) Console.Clear();

Lo que requiere apuntar a .NET 4.5 o superior. Puede usar el código en esta publicación SO si necesita apuntar a versiones anteriores.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda