Thursday, May 19, 2005

Dumbster - Email Testing

ในการเขียน Application ในยุค Internet นี้
ส่วนใหญ่เรามักจะออกแบบให้มี feature
Mail Alert ซึ่งเป็นการแจ้งเตือนผู้ใช้
ถ้าเกิดเหตุการณ์อะไรบางอย่าง
สมัยก่อนเวลาผม implement feature นี้
แล้วเกิดต้องการจะ test
ก็เพียงแต่ set config ให้ mail ไปหา
account ตัวเอง แล้วก็ทดลองจำลอง
เหตุการณ์ จากนั้นก็เข้าไป check mail
ตัวเองว่ามีการส่ง mail มาจริงหรือเปล่า

มี solution อีกอันที่ผมพบใน AppFuse
ก็คือใช้ Dumbster ซึ่งเป็น Fake SMTP Server
ร่วมกับ junit ในการ test

ตัวอย่างการเขียน testcase
public void testExecute() throws Exception {
request.addParameter("username", "tomcat");
page.setRequestCycle(getCycle(request, response));
SimpleSmtpServer server = SimpleSmtpServer.start(2525);

page.execute(page.getRequestCycle());

assertFalse(page.hasErrors());

// verify an account information e-mail was sent
server.stop();
assertTrue(server.getReceivedEmailSize() == 1);

// verify that success messages are in the request
assertNotNull(page.getSession().getAttribute("message"));
}


กรณีที่ test แบบนี้ เราจะเรียตัว dumbster ว่าเป็น
Mock Object (จริงๆอาจจะเรียกได้ไม่เต็มปากนัก
แต่ลักษณะ pattern เป็นไปตามนั้น)
สำหรับใครที่ยังไม่คุ้นกับการ
test แบบนี้ ลองอ่านเรื่อง Mock object ที่ link นี้ครับ
What Are Mock Objects?
MockObjects

ไว้คราวหน้าจะแสดงให้ดูว่า Tapestry
มีวิธีการใช้ MockObjects ในการ test อย่างไร
(ได้ตัวอย่างมาจาก AppFuse อีกเช่นกัน)

Related link from Roti

No comments: