Effective Strategies for Asynchronous Unit Testing in Java