2010-11-05 14 views
21

He una prueba que tiene que trabajar más de 1 minuto (VS2008, MSTest, las pruebas son lanzados desde el VisualStudio):MSTest: cómo aumentar el tiempo de prueba

const int TestTimeout = 1; 

    [TestMethod] 
    [Timeout(10*60*1000)] // 10 minutes 
    public void Login_ExpirationFail_Test() 
    { 
     IAuthenticationParameters parameters = new AuthenticationParameters(...); 
     LdapAuthentication auth1 = new LdapAuthentication(); 
     IAuthenticationLoginResult res = auth1.Login(parameters); 

     Assert.IsNotNull(res); 
     Assert.IsFalse(string.IsNullOrEmpty(res.SessionId)); 

     const int AdditionalMilisecodns = 400; 
     System.Threading.Thread.Sleep((TestTimeout * 1000 + AdditionalMilisecodns) * 60); 

     LdapAuthentication auth2 = new LdapAuthentication(); 
     auth2.CheckTicket(res.SessionId); 
    } 

Esta prueba tiene un acabado en "Ejecutar" modo con "Prueba" Login_ExpirationFail_Test 'excedió el tiempo de espera de ejecución ". mensaje de error, en "Depurar" - funciona bien.

Vi algunos problemas similares relacionados con el lanzamiento de pruebas desde la línea de comandos.

¿Cómo puedo hacer que mi prueba sea viable en el modo "Ejecutar"?

Gracias.

Respuesta

17

La respuesta es muy simple: el valor del atributo debe ser una constante, no una expresión.

Cambio

[Timeout(10*60*1000)] 

a

[Timeout(600000)] 

resuelto un problema.

EDIT: Comentario a la respuesta que me llamó la atención un error que he hecho originalmente en la respuesta (escribió "60000" como valor de tiempo de espera). En mi código fuente tengo 6000000 y ese valor me ayudó. la respuesta se corrigió recientemente

+5

Tus cálculos son incorrectos. Lo has eliminado por un factor de 10. Además, la expresión vs. constante anterior es exactamente equivalente porque el compilador C# lo convertirá en la misma cosa (excepto por el error matemático). Si esta solución funcionó, sospecho que es porque el error matemático redujo el valor a algo dentro del rango que mstest requiere. –

+0

Hola Andrew, gracias por traer esto a nuestra atención. Eso fue solo un error de impresión en la respuesta. He usado las matemáticas adecuadas en mi código fuente. No sé por qué eso ayudó, pero eso fue así. – Budda

+4

@Budda ¿Cómo es esta una respuesta? ¿Por qué es * una constante *, una respuesta? Una expresión constante es solo eso, constante y, como Andrew señaló, esto es lo que el compilador hace de todos modos. Lo único que logras al convertir esto en una constante es un montón de ceros que se pueden malinterpretar fácilmente, ya que creo que esta respuesta puede atestiguar, la expresión es buena y mucho más legible. –

0
No

pasos específicos, pero usted debe apuntar en la dirección correcta:

Añadir una prueba archivo de configuración a la solución si no tiene ya uno.

Abra el asistente de configuración con la configuración de prueba y busque la configuración que controla el tiempo de espera de la prueba.

+0

hay tales ajustes en las configuraciones de las pruebas, sino que están relacionadas con todas las pruebas ... mientras que yo quiero tener tiempo de espera se extendió durante 1 prueba sólo ... – Budda

+0

qué está aplicando Tiempo de espera para la const? No he usado ese atributo, pero seguramente debe aplicarse al método de prueba – eglasius

+0

Lo siento por error de impresión. Definitivamente, [Timeout] se aplicó al método. Aquí hay un error de impresión (corregido recientemente). – Budda

8

Además de especificar el número de segundos, Timeout() admite una constante que permite una espera infinita.

[Timeout(TestTimeout.Infinite)] 
+0

Esto no proporciona una respuesta a la pregunta.Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. - [De la crítica] (/ review/low-quality-posts/11367272) –

+0

La pregunta original era un problema con el tiempo de espera de la prueba, por ejemplo en mi caso, mi prueba se ejecutó durante 3h + así que la respuesta correcta fue la primera respuesta, para establecer la hora, mi respuesta decía "también puedo", lo que significa que si el desarrollador tiene una prueba larga y no sabe cuánto tiempo lleva, TestTimeout.Infinte es la mejor opción. Por favor, explica por qué esta no es una buena respuesta. –

+0

Lo mejor es que las respuestas expliquen su propia lógica y no se basen en otras respuestas para el contexto, pero estoy de acuerdo en que esto es una adición útil. Disculpas por el proceso de revisión que a veces es un poco confuso sin contexto. –

Cuestiones relacionadas