Nunit: El mensaje de excepción es "TestDelegate" cuando se usa Throws.Nothing.After

Creado en 24 oct. 2016  ·  5Comentarios  ·  Fuente: nunit/nunit

¿Alguien podría explicarme el siguiente comportamiento? (asumiendo que no es un error ...). Al usar DelayedConstraint

Assert.That(() => {throw new Exception("hello");}, Throws.Nothing.After(100));
Salidas:

Esperado: no se lanzará ninguna excepción después de un retraso de 100 milisegundos
Pero fue: <NUnit.Framework.TestDelegate>

Assert.That(() => {throw new Exception("hello");}, Throws.Nothing);
Salidas:

Esperado: no se lanzará ninguna excepción
Pero fue: <System.Exception: hello
a ...

Espero que ambos emitan el segundo mensaje.

bug low

Comentario más útil

Sí, tiene algún sentido. Tendremos que anular la implementación general de After para esas restricciones particulares.

Todos 5 comentarios

El uso de After con Throws no tiene sentido, pero si está permitido debería dar un mejor resultado.

Mi preferencia sería arreglar esto haciendo que After no esté disponible en esta restricción en el momento de la compilación. Si eso no se puede hacer, entonces el mensaje debería decir que es un error usarlo aquí.

¿Puedo preguntar por qué dice que no tiene sentido?

Porque lo que estamos tratando de hacer en nuestra prueba es asegurarnos de que después de una cierta cantidad de tiempo, un método deje de lanzar ).

Parecía que arrojaba nada, después sería apropiado y parece que funciona para nosotros.

Entonces, cada vez que se llama al método, ¿querrá que tenga éxito si no se lanza ninguna excepción, pero siga intentándolo si se lanza una, y finalmente solo fallará después de que se acabe el tiempo? Eso sería coherente con el funcionamiento habitual de After, aunque no con la forma en que generalmente manejamos las excepciones. :sonrisa:

¿Y si usaras Throws?().Después ? ¿Debería permitirse eso?

Sí, esto puede no ser coherente con la forma en que generalmente manejamos las excepciones, pero así es como funciona la API NSubstitute . Hay alternativas: podríamos hacer nuestra propia verificación de sondeo para verificar que se recibe la llamada, o podríamos esperar a otra cosa antes de realizar la llamada. Pero el marco de restricciones retardadas de NUnit parece bueno para muchas de estas pruebas basadas en subprocesos / tiempo, por lo que estaba tratando de usarlo.

TBH, sí, esperaría que Throws.After funcione también. Cualquier cosa que desee verificar con una restricción evaluada inmediatamente, creo que tiene el mismo sentido trabajar con una restricción retrasada: - /

Sí, tiene algún sentido. Tendremos que anular la implementación general de After para esas restricciones particulares.

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