首先 這篇主要是翻譯 這篇 的教學, 再用自己的方式解釋。 Email Service 文章開頭以 Email Service 來解釋, UML 應該是長這樣, Application 強依賴 EmailService , Application 在一開始就初始化了 EmailService, 而 Main 也強依賴 Application , 這樣寫並沒有太大的問題, 但不容易對 Application class 做測試, 因為不容易對 EmailService 做 mock. 修正 Application 方便測試 為了讓 Application 能夠被測試, 所以改成 inject EmailService 的建構方式 public class Application { private EmailService emailService; public Application(EmailService emailService) { this.emailService = emailService; } public void notification(String message, String receiver) { this.emailService.sendEmail(message, receiver); } } 簡單的使用 Mockito 來 mock EmailService 測試 <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.12.0</version> </dependency> package dependency.injection; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito...