Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
291,5 KB
Nội dung
UNIT TEST Nhóm 10 Các nội dung Định nghĩa Unit Test Tầm quan trọng Unit Test Phương pháp xây dựng Unit Test Các đối tượng thay (MOCK Object) Các kinh nghiệm Unit Test Các công cụ hỗ trợ Unit Test gì? - Unit Testing, kiểm tra phận nhỏ, unit riêng biệt source code chương trình để kiểm tra xem có hoạt động xác không - Từ phận nhỏ này, ta lại kiểm tra unit lớn có sử dụng unit nhỏ kiểm tra Unit Test - Một Unit Test phần source code, thực thi phần code khác so sánh kết thực tế với kết mong đợi - Được thực lập trình viên - Có thể làm tay (Manual Unit Test) tự động (Automated Unit Test) Tầm quan trọng Unit Test • - Lợi ích Unit Test: Đảm bảo chất lượng Unit phần mềm Phát lỗi sớm chỉnh sửa kịp thời Giảm chi phí Tái sử dụng Giúp Design Phương pháp xây dựng Unit Test Quá trình thực Unit Test Unit test nên xây dựng cho module sau kiểm tra xong mã nguồn Phương pháp xây dựng Unit Test Thiết kế UT: theo trình tự sau: • Thiết lập điều kiện cần thiết: khởi tạo đối tượng, xác định tài nguyên cần thiết, xây dựng liệu giả… • Triệu gọi phương thức cần kiểm tra • Kiểm tra hoạt động đắn phương thức • Dọn dẹp tài nguyên sau kết thúc kiểm tra Phương pháp xây dựng Unit Test Có kỹ thuật phổ biến: - Black box testing - White box testing Phương pháp xây dựng Unit Test • Phân tích tình xảy mã • Mọi UT phải bắt đầu với trạng thái “fail” chuyển trạng thái “pass” sau số thay đổi hợp lý mã • Khi viết đoạn mã quan trọng, viết UT tương ứng • Số lượng Test Case đủ lớn để phát điểm yếu mã theo nguyên tắc: – Nếu nhập giá trị đầu vào hợp lệ kết trả phải hợp lệ – Nếu nhập giá trị đầu vào không hợp lệ kết trả phải không hợp lệ Phương pháp xây dựng Unit Test • Sớm nhận biết đoạn mã không ổn định có nguy gây lỗi cao, viết UT tương ứng để khống chế • Nên tạo lớp kiểm tra riêng lỗi nghiêm trọng phát sinh từ đối tượng quan trọng • Nên kiểm tra lại UT cũ, sau thời gian code • Sử dụng nhiều phương thức kiểm tra khác Hãy viết đơn giản tốt • Cuối cùng, viết UT đòi hỏi nỗ lực, kinh nghiệm sáng tạo viết PM 10 Các Dạng Mocks Có thể dùng nhiều kĩ thuật để test module chương trình: Stubs Mock Test a servlet 16 Simple Stubs • Giả sử gọi hàm getTime() để trả thời gian tại: public long getTime() { return System.currentTimemillis(); } public long getTime() { if(debug) { return debug_cur_time; } else{ return System.currentTimemillis(); } } 17 Mock Kiểm thử lớp truy xuất sở liệu: public class RealDAO { public string getName( long id) { //… } } Tạo interface: public interface Environmental { public long getTime(); // Other methods omitted } 18 MOCK(tt) Áp dụng class interface cho lớp muốn kiểm thử: public class SystemEnvironment implements Environmental { public long getTime() { return System.currentTimeMillis(); } // other methods } 19 MOCK(tt) Tạo class mock kế thừa từ interface này: public class MockSystemEnvironment implements Environmental { public long getTime() { return current_time; } public void setTime(long aTime) { current_time = aTime; } private long current_time; // } 20 MOCK(tt) Sử dụng mock để kiểm thử chức liên quan: public class PrintBill { public static string Print(string name) { string result; if (name == "XDPM") { result = "Xin dung phun em"; } else { result = "Unknown"; } return result; } } 21 MOCK(tt) [TestFixture] public class PrintTest { [Test] public void XDPMTest() { MockDAO mock = new MockDAO(); string actualValue = PrintBill.Print(mock.GetName(0)); Assert.That(actualValue, Is.EqualTo("Xay dung phan mem")); } } 22 Test a Servlet Là khối lệnh web server quản lý Yêu cầu URLs xác định chuyển đến container servlet Các URL gọi code servlet Sau servlet gửi reponse tới trình duyệt yêu cầu 23 Test a Servlet(tt) public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException { String str_f = req.getParameter("Fahrenheit"); res.setContentType("text/html"); PrintWriter out = res.getWriter(); try { int temp_f = Integer.parseInt(str_f); double temp_c = (temp_f - 32)*5.0 /9.0; out.println("Fahrenheit: " + temp_f + ", Celsius: " + temp_c); g catch (NumberFormatException e) f out.println("Invalid temperature: " + str_f); } } 24 Test a Servler(tt) Line 10 20 25 30 } 35 import junit.framework.* import com.mockobjects.servlet.*; public class TestTempServlet extends TestCase { public void test_bad_parameter() throws Exception { TemperatureServlet s = new TemperatureServlet(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); request.setupAddParameter("Fahrenheit", "boo!"); response.setExpectedContentType("text/html"); 15 s.doGet(request,response); response.verify(); assertEquals("Invalid temperature: boo!nn", response.getOutputStreamContents()); } public void test_boil() throws Exception { TemperatureServlet s = new TemperatureServlet(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); request.setupAddParameter("Fahrenheit", "212"); response.setExpectedContentType("text/html"); s.doGet(request,response); response.verify(); assertEquals("Fahrenheit: 212, Celsius: 100.0nn", response.getOutputStreamContents()); 25 Ưu điểm Đảm bảo tính xác chương trình Phát lỗi từ phase trình phát triển phần mềm Sửa đổi dễ dàng Tăng khả tích hợp code 26 Nhược điểm Gây khó khăn việc thực chuyển đổi đối tượng thật đối tượng thay thế(mocks) Không thể lường trước vấn đề xảy kết hợp module với Phải trì mô hình(maintain the mock) 27 Các kinh nghiệm Unist test Các test độc lập Test chức lần Các Unit test phải nhỏ nhanh Unit test đảm bảo đầy đủ không ảnh hưởng lẫn Unit test phải đơn giản để thực Tên Test phải rõ ràng, xác Thiết kế code test phương pháp Sửa lỗi phát 28 Các công cụ hỗ trợ - Junit CppUnit Cunit EasyMock HtmlUnit HttpUnit NUnit v.v… 29 Demo NUnit 30 [...]... nghiệm trong Unist test Các test độc lập Test mỗi chức năng một lần Các Unit test phải nhỏ và nhanh Unit test đảm bảo đầy đủ và không ảnh hưởng lẫn nhau Unit test phải đơn giản để thực hiện Tên của Test phải rõ ràng, chính xác Thiết kế code và test đúng phương pháp Sửa lỗi ngay khi được phát hiện 28 Các công cụ hỗ trợ - Junit CppUnit Cunit EasyMock HtmlUnit HttpUnit NUnit v.v… 29 Demo NUnit 30 ... result = "Xin dung phun em"; } else { result = "Unknown"; } return result; } } 21 MOCK(tt) [TestFixture] public class PrintTest { [Test] public void XDPMTest() { MockDAO mock = new MockDAO(); string actualValue = PrintBill.Print(mock.GetName(0)); Assert.That(actualValue, Is.EqualTo("Xay dung phan mem")); } } 22 Test a Servlet Là những khối lệnh của 1 web server quản lý Yêu cầu các URLs xác định chuyển... temp_f + ", Celsius: " + temp_c); g catch (NumberFormatException e) f out.println("Invalid temperature: " + str_f); } } 24 Test a Servler(tt) Line 1 5 10 20 25 30 } 35 import junit.framework.* import com.mockobjects.servlet.*; public class TestTempServlet extends TestCase { public void test_ bad_parameter() throws Exception { TemperatureServlet s = new TemperatureServlet(); MockHttpServletRequest request... debug replacement for a real-world object” (Andy Hunt, Dave Thomas – Pragmatic unit testing in java with Junit) 2 “A mock object is an object created to stand in for an object that your code will be collaborating with Your code can call methods on the mock object, which will deliver results as set up by your tests.” (Source: JUnit in Action, Vincent Massol) 11 Đăc điểm • Đơn giản hơn đối tượng thực nhưng... interface 3 Trích interface từ đối tượng thật và triển khai mock object(MO) dựa trên interface đó 14 MOCK Object INTERFACE REAL CLASS MOCK CLASS TESTED FUNCTION 15 Các Dạng Mocks Có thể dùng nhiều kĩ thuật để test các module trong chương trình: 1 Stubs 2 Mock 3 Test a servlet 16 Simple Stubs • Giả sử gọi hàm getTime() để trả về thời gian hiện tại: public long getTime() { return System.currentTimemillis();... s.doGet(request,response); response.verify(); assertEquals("Fahrenheit: 212, Celsius: 100.0nn", response.getOutputStreamContents()); 25 Ưu điểm 1 Đảm bảo tính chính xác của chương trình 2 Phát hiện lỗi ngay từ những phase đầu tiên trong quá trình phát triển phần mềm 3 Sửa đổi dễ dàng hơn 4 Tăng khả năng tích hợp code 26 Nhược điểm 1 Gây khó khăn trong việc thực hiện chuyển đổi giữa đối tượng thật và đối tượng... Servlet Là những khối lệnh của 1 web server quản lý Yêu cầu các URLs xác định chuyển đến container servlet Các URL lần lượt gọi các code servlet Sau đó servlet gửi 1 reponse tới các trình duyệt yêu cầu 23 Test a Servlet(tt) public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException { String str_f = req.getParameter("Fahrenheit"); res.setContentType("text/html");... request.setupAddParameter("Fahrenheit", "boo!"); response.setExpectedContentType("text/html"); 15 s.doGet(request,response); response.verify(); assertEquals("Invalid temperature: boo!nn", response.getOutputStreamContents()); } public void test_ boil() throws Exception { TemperatureServlet s = new TemperatureServlet(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); ... Định nghĩa Unit Test Tầm quan trọng Unit Test Phương pháp xây dựng Unit Test Các đối tượng thay (MOCK Object) Các kinh nghiệm Unit Test Các công cụ hỗ trợ Unit Test gì? - Unit Testing, kiểm... Unist test Các test độc lập Test chức lần Các Unit test phải nhỏ nhanh Unit test đảm bảo đầy đủ không ảnh hưởng lẫn Unit test phải đơn giản để thực Tên Test phải rõ ràng, xác Thiết kế code test. .. Phương pháp xây dựng Unit Test Quá trình thực Unit Test Unit test nên xây dựng cho module sau kiểm tra xong mã nguồn Phương pháp xây dựng Unit Test Thiết kế UT: theo trình tự sau: • Thiết