Wie Schreibe ich einen JUnit-Testfall zu testen, threads und events
Ich habe einen java-code, der funktioniert in einem (Haupt -) thread. Aus dem Haupt-thread, ich spawn einen neuen thread, in dem ich eine server nennen. Nach den server-Aufruf erfolgt ist, ich mache einige Arbeit in den neuen thread und nach, dass der code verbindet den Haupt-thread.
Ich bin mit dem eclipse-Arbeitsplätzen zu tun, die server nennen.
Will ich wissen, wie kann ich schreiben Sie einen JUnit-Testfall.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie möglicherweise neu zu strukturieren Sie Ihren code so, dass es leicht sein kann, getestet.
Ich kann sehen, dass Sie verschiedene Bereiche für die Prüfung:
Struktur Ihrer Implementierung, so dass eine Thread-Management-code ist agnostisch in Bezug auf die Modalitäten der Arbeiter. Dann können Sie mit Gespielter Arbeitnehmer zu ermöglichen das testen von Thread-Management - zum Beispiel ein Mock-Arbeiter, der scheitert in gewisser Weise können Sie testen, bestimmte Pfade in der management-code.
Implementieren der Arbeiter-code, so dass es sein kann, die isoliert ausgeführt werden. Sie können dann unit-Tests unabhängig voneinander, mit mocks für den server.
Für die Parallelität Prüfung der links, die von Abhijeet Kashnia helfen.
Dies ist, was ConcurrentUnit erstellt wurde. Die Allgemeine Verwendung ist:
Sehen die ConcurrentUnit Seite für mehr info.
Ich schlage vor, Sie verwenden ein mocking-framework, um zu bestätigen, dass die server-Aufruf wurde in der Tat gemacht. Wie für die thread unit-Tests: Unit-Tests Multithread-Anwendungen
Den Ressourcen Abhijeet Kashnia helfen kann, aber ich bin nicht sicher, was Sie versuchen zu erreichen.
Können Sie tun, unit-testen mit mocks zu überprüfen, ob Ihre code nicht testen, Parallelität, sondern wird eine Abdeckung.
Sie können schreiben, eine integration test, um zu überprüfen, dass die threads sind erstellt, und trat in die Mode, die Sie erwarten.Dies ist allerdings keine Garantie gegen concurrency-Probleme. Die meisten gleichzeitigen Probleme von der timing-Fehler, die nicht vorhersehbar sind und somit nicht getestet werden können für genau.
Ich vermute, dass Sie möglicherweise getan haben, Ihre Spott-code und möchten eine einfache integration test, um sicherzustellen, dass Ihre server-Aufruf funktioniert.
Eines der Probleme, die in die Prüfung von Gewinde kommt aus Ihrer Natur - Sie sind gleichzeitige. Das bedeutet, dass man Kraft in das schreiben von JUnit-test-code, der gezwungen ist, zu warten, bis der thread beendet hat, seinen job vor dem testen Sie Ihren code-Ergebnisse. Dies ist nicht eine sehr gute Art, testen von code, und kann unzuverlässig sein, aber in der Regel bedeutet, dass Sie eine Idee haben, ob Ihr code funktioniert.
Als ein Beispiel, kann Ihr code so Aussehen:
Ich weiß wirklich nicht, wie dies zu tun und lieber verspottet und Stimme mit den anderen Antworten. Aber, wenn Sie brauchen, um zu testen, Ihre threads, dann ist dies ein Ansatz, den ich finde funktioniert.
Hier ist meine Lösung zu testen asynchrone Methode, die verwendet thread.start:
Wenn Ihr problem ist nur warten auf das Ergebnis, verwenden Sie ExecutorService zum laichen Ihre threads. Kann es akzeptieren, Arbeit, Arbeitsplätze, sowohl als Runnable und Callable. Wenn Sie das letztere, dann erhalten Sie eine Zukunft - Objekt zurück, das verwendet werden kann, um auf das Ergebnis zu warten. Sollten Sie ExecutorService jedenfalls, als aus dem, was ich verstehe, Sie erstellen viele threads, und dies ist ein perfekter Anwendungsfall für Testamentsvollstrecker Dienstleistungen.
Und die test-Klasse: