-
Lý do: Khi test 1 class mà class đang sử dụng class khác. VD ở đây là class User sử dụng class Mailer thì sau khi chạy UserTest thì việc delay của hàm gửi email của class Mailer là không tránh khỏi. => Sử dụng kỹ thuật inject object để truyền đối tượng Mailer vào class User
-
Bước 1: Khởi tạo thuộc tính $Mailer
-
Bước 2: Tạo phương thức setMailer để set đối tượng cho thuộc tính class User { protected $mailer;
public function setMailer(Mailer $mailer){ $this->mailer = $mailer; } }
-
Bước 3: Tiến hành test class TestUser{ public function testNotify(){ $user = new User(); // Khởi tạo đối tượng cần test $mockMailer = $this->createMock(Mailer::class); // Mock giả lập 1 class mailer $mockMailer->method('sendMail')->willReturn(true); // Gọi hàm sendMail => sẽ trả về true $user->setMailer($mockMailer); //Gọi tới hàm setMailer $user->email = "dat@mail.com"; //Set email cho thuộc tính cần gửi $this->assertTrue($user->notify("Xin chào !")); // Chạy assert để test kết quả mong muốn là true } }