Perhaps there's a way to tell if a test has already failed, then this open/closed searcher test can be skipped?
What Robert pointed to is ok. The "nicest" way to cleanup-on-success only is to write a test rule and cleanup/ make assertions if the sub-statement passes without throwing an exception. @Before*/After* hooks are always executed, regardless of the test output (failure or no failure).
I realize the number of nested stack entries from rules can bother some, but it is really a clean separation of concerns and the ordering is then explicit (both in the code and at runtime) which is nice.
I'm not asking you to fix this – I will be biting into LuceneTestCase at some point (have some urgent stuff piled up right now) and I will try to clean up @Before/@After* hooks as well so that they're not a single blob of various checks and things.