12
votes

Test Junit "Times Out" malgré l'exécution rapide?

J'ai quelques cas de test que Junit me raconte le temps sur 10000 ms lorsque l'ensemble du test ne dure que quelques secondes. Voici la sortie:

-------------------------------------------------------------------------------
Test set: com.w2ogroup.analytics.sibyl.transport.impl.http.server.HttpServerTransportTests
-------------------------------------------------------------------------------
Tests run: 3, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 3.136 sec <<< FAILURE!
closeTest1(com.w2ogroup.analytics.sibyl.transport.impl.http.server.HttpServerTransportTests)  Time elapsed: 2.218 sec  <<< ERROR!
java.lang.Exception: test timed out after 10000 milliseconds

closeTest2(com.w2ogroup.analytics.sibyl.transport.impl.http.server.HttpServerTransportTests)  Time elapsed: 0.661 sec  <<< ERROR!
java.lang.Exception: test timed out after 50000 milliseconds


4 commentaires

Montrez-nous les écoles ...


@Stephenc a mis à jour la question.


Intéressant ... mais je voulais dire la stacktrace qui inclut le java.lang.exception . Cela devrait être dans les rapports Surefire.


@Stephenc derp. Mis à jour la question.


4 Réponses :


1
votes

Junit détecte un test qui a expiré par attraper un timeoutException . Cela sera normalement causé par le cadre de test appelant shutdownnet sur le exécutorservice qui exécute le test.

est-il possible que l'un de vos tests défaillants jette cette exception elle-même et que Junit le signalait comme un délai d'attente de test?


2 commentaires

C'est une grande information. +1. Mon code ne jette définitivement pas un TimeoutException , et je ne pense pas que mon test soit non plus. Je ferme les flux et interrompre les fils Nio, cependant; Êtes-vous au courant d'une raison quelconque pour laquelle ceux-ci jettent un timeoutException ? Je vais envelopper mes tests dans un essayer / attraper pour tester cette hypothèse.


timeoutException est utilisé par exécutantservice , qui est fortement utilisé par les classes Nio . Je suppose donc à l'intérieur que les classes Nio déclenchent le délai d'exécution.



2
votes

Avez-vous de modification d'un délai d'expiration défini pour les tests?

 @Rule
  public Timeout globalTimeout= new Timeout(10);


1 commentaires

Bonne question. J'utilise @Test (timeout = 10000) . J'ai mis à jour la question.



0
votes

On dirait que la connexion est suspendue xxx

et le test ne finit pas vraiment après quelques secondes.

Essayez de vous concentrer sur la httpconnection Erreur (ou ajoutez votre code si vous avez besoin d'une aide supplémentaire)

voir des exemples de ce problème:


0 commentaires