You've been bitten by the testing bug, are thoroughly test infected. Excellent! You're undoubtedly producing more robust, less buggy software faster and at a lower cost. Now it's time to think about what makes unit tests even better. We'll discuss flakiness, debuggability, reproducibility, speed, specificity, and other characteristics of effective unit tests. Examples will be in Java and JUnit, but the principles apply generally to all languages and test frameworks.