The TestNG documentation lists 5 ways of registering a TestNG listener. Here’s a sixth, that’s sometimes useful:
If your listener is specific to a test suite (it’s not really general purpose) or if you don’t mind dropping the source into each test suite, then relying on the fact that the
@Listeners annotation makes the named listener(s) available to the entire suite (not just the one annotated class) you can make your listener itself be a test class!
- Put your listener class in the same place as the rest of the test classes in your suite (or name it in your
testng.xml, or whatever).
- Put an
@Listenersannotation in front of the class, referring to itself.
- Add a method annotated with
@Testinside the listener class.
Now the listener class will be identified as a test class, and it’s
@Listener annotation will be respected, and thus it itself will be a listener.
Note that your test method in the listener class can have
@Test(enabled=false) (so it doesn’t pollute your results) and it still works!