Nunit: Mensaje de excepción de resultado de prueba adecuado al presionar `TimeoutAttribute`

Creado en 25 may. 2021  ·  3Comentarios  ·  Fuente: nunit/nunit

Hola chicos,

Últimamente estaba experimentando con el TimeoutAttribute y me encontré con algunos tiempos de espera para mis pruebas. Solo vi un Exception doesn't have a stacktrace como mensaje de resultado de la prueba, lo que me confundió a primera vista. Entonces me di cuenta de que la prueba estaba llegando al tiempo de espera.

Intenté profundizar en el código para ver si es posible implementar un mensaje de excepción de tiempo de espera, pero no he encontrado nada hasta ahora.

Así que me gustaría sugerir un mejor mensaje de resultado de la prueba cuando se agote el tiempo de espera.

Código para reproducir:

[Test]
[Timeout(1000)]
public async Task Timeout()
{
    // Arrange

    // Act
    await Task.Delay(2000).ConfigureAwait(false);

    // Assert
    Assert.Pass();
}

Gracias y saludos cordiales

bug normal

Todos 3 comentarios

Hola @Prodigio

¿Cómo está ejecutando las pruebas (VS, dotnet test o el corredor de la consola), a qué marco se dirige y qué versiones de NUnit, NUnit3TestAdapter y el corredor de la consola está utilizando?

Un poco de escaneo inicial del código podría indicar que para dotnet core no configuramos el mensaje, solo configuramos la etiqueta. Comparar (flujo de marco)
https://github.com/nunit/nunit/blob/b34eba3ac1aa6957157857bddd116256c634afab/src/NUnitFramework/framework/Internal/Commands/TimeoutCommand.cs#L83
contra (flujo de núcleo de dotnet)
https://github.com/nunit/nunit/blob/b34eba3ac1aa6957157857bddd116256c634afab/src/NUnitFramework/framework/Internal/Commands/TimeoutCommand.cs#L110 -L113

También compare la diferencia en las pruebas TimeoutCausesOtherwisePassingTestToFailWithoutDebuggerAttached() . Versión de Dotnet Framework
https://github.com/nunit/nunit/blob/b34eba3ac1aa6957157857bddd116256c634afab/src/NUnitFramework/tests/Attributes/TimeoutTests.cs#L297 -L299
versión de dotnet core
https://github.com/nunit/nunit/blob/b34eba3ac1aa6957157857bddd116256c634afab/src/NUnitFramework/tests/Attributes/TimeoutTests.cs#L367 -L369

No estoy seguro de si esta diferencia es a propósito, pero parece un error. Dado que no escribimos nada en el mensaje para dotnet core, el XML resultante no contiene ninguna información y, por lo tanto, no se puede presentar al usuario. En dotnet framework, la prueba tendrá el siguiente mensaje de error Test exceeded Timeout value of 1000ms

Hola @mikkelbu ,

perdón por la información que falta. Aquí está:

  • Localmente estoy ejecutando nuestras pruebas con Resharper dentro de VS 2019
  • Nuestro servidor CI es TeamCity, donde ejecutamos las pruebas "desnudas" por un lado con dotnet test y por el otro con la ayuda de NUKE y dotnet test , para algunos informes de cobertura
  • Dirigirse a .NET Core 3.1 en todos los proyectos de prueba

Veo el mismo mensaje Exception doesn't have a stacktrace localmente y en TeamCity.

No estoy usando la consola. Otras versiones de NUnit son:

  • NUnit v3.13.2
  • NUnit.Engine v3.12.0
  • NUnit3TestAdapter v4.0.0-beta.2

Me di cuenta de que, además de NUnit, también tenemos Microsoft.NET.Test.Sdk v.16.9.4 instalado como paquete NuGet. ¿Podría ser esto un problema?

¡Gracias!

Hola @Prodigio

Gracias por toda la información. Estoy bastante seguro de que la información que falta se debe a que está apuntando a .NET Core 3.1 y hemos cometido un error en nunit / nunit # 3190.

Dicho esto, no creo que registremos el seguimiento de la pila cuando la prueba falla debido a un tiempo de espera, ya que no sabemos qué tan lejos estamos en el código (entonces, a dónde debería apuntar exactamente el seguimiento de la pila). Las dos llamadas a context.CurrentResult.SetResult anteriores tienen un tercer argumento que es el stacktrace, pero no lo completamos.

Pero creo que deberíamos arreglar el flujo de .NET Core, por lo que también informamos Test exceeded Timeout value ... como mensaje.

¿Fue útil esta página
0 / 5 - 0 calificaciones