Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

395
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!