SlideShare a Scribd company logo
1 of 36
Unit test và NUnit
              SỬ DỤNG MOCK OBJECT
               TRONG UNIT TESTING



                                Trình bày: Nhóm 13, 14, 15
1   Le Van Long – FIT – HCMUS                        4/10/2011
NỘI DUNG
     Mock object là gì?


     Phân loại mock object.


     Lợi ích của mock object.


     Cách sử dụng mock object.




2   Le Van Long – FIT – HCMUS     4/10/2011
NỘI DUNG
     Mock object là gì?

     Phân loại mock object.


     Lợi ích của mock object.


     Cách sử dụng mock object.




3   Le Van Long – FIT – HCMUS     4/10/2011
ĐỊNH NGHĨA
    A mock object is simply a testing replacement for a real-
    world object.
    Andy Hunt, David Thomas – Pragmatic unit testing in C#
                                  with NUnit, 2nd edition, p91.

    Mock Objects are a technique that allow you to isolate
    classes from their dependencies for testing purposes.
                                                  Geoff Lane

4    Le Van Long – FIT – HCMUS                           4/10/2011
NỘI DUNG
     Mock object là gì?


     Phân loại mock object.

     Lợi ích của mock object.


     Cách sử dụng mock object.




5   Le Van Long – FIT – HCMUS     4/10/2011
PHÂN LOẠI
    • Static mock: đƣợc viết bằng tay hay phát sinh tự động
      ở một bƣớc nào đó trong chƣơng trình.

    • Dynamic mock: phụ thuộc vào proxy interface.




6    Le Van Long – FIT – HCMUS                        4/10/2011
NỘI DUNG
     Mock object là gì?


     Phân loại mock object.


     Lợi ích của mock object.

     Cách sử dụng mock object.




7   Le Van Long – FIT – HCMUS     4/10/2011
LỢI ÍCH
    Mock object đƣợc sử dụng trong các trƣờng hợp sau:

    Đối tƣợng thật có những hành vi không đoán biết
    đƣợc. Ví dụ: tỉ giá trên thị trƣờng chứng khoán.

    Đối tƣợng thật khó cài đặt. Ví dụ: môi trƣờng mạng.


    Đối tƣợng thật chậm.


8    Le Van Long – FIT – HCMUS                         4/10/2011
LỢI ÍCH (tt)
    Đối tƣợng thật có/là giao diện ngƣời dùng.


    Việc kiểm chứng cần biết một đối tƣợng thật đƣợc sử
    dụng nhƣ thế nào? Ví dụ, việc kiểm chứng cần biết một
    hàm callback có đƣợc gọi hay không?

    Đối tƣợng thật không tồn tại.



9    Le Van Long – FIT – HCMUS                       4/10/2011
NỘI DUNG
      Mock object là gì?


      Phân loại mock object.


      Lợi ích của mock object.


      Cách sử dụng mock object.



10   Le Van Long – FIT – HCMUS     4/10/2011
CÁCH SỬ DỤNG MOCK OBJECT
      Stubs


      Fakes


      Mock objects




11   Le Van Long – FIT – HCMUS   4/10/2011
CÁCH SỬ DỤNG MOCK OBJECT
      Stubs

      Fakes


      Mock objects




12   Le Van Long – FIT – HCMUS   4/10/2011
STUB
     Bƣớc 1: Sử dụng interfaces để mô tả những phƣơng
     thức của đối tƣợng.

     Bƣớc 2: Cài đặt interface cho production code.

     Bƣớc 3: Cài đặt interface cho mock object.



13    Le Van Long – FIT – HCMUS                       4/10/2011
STUBS

                                 INTERFACE


               REAL                          STUB
               CLASS                         CLASS

                                          TESTED
                                         FUNCTION
14   Le Van Long – FIT – HCMUS                       4/10/2011
STUB-VÍ DỤ (1)
     Có một lớp truy xuất CSDL:
     public class RealDAO
     {
          public string GetName(long id)
          {
                  // Do something
          }
     }
15    Le Van Long – FIT – HCMUS            4/10/2011
STUB-VÍ DỤ (2)
     Từ những phƣơng thức cần giả lập, rút ra interface.

     public interface DAO
     {
           string GetName(long id);
     }



16    Le Van Long – FIT – HCMUS                        4/10/2011
STUB-VÍ DỤ (3)
     Áp dụng interface này cho lớp mình muốn giả lập (cho
     lớp này kế thừa interface).

     public class RealDAO : DAO
     {
               public string GetName(long id)
               {
                           // Do something
               }
17
     } Le Van Long – FIT – HCMUS                      4/10/2011
STUB-VÍ DỤ (4)
     Cho lớp stub kế thừa từ interface này. Cho phƣơng
     thức trả về một giá trị giả mà chúng ta nghĩ chƣơng
     trình sẽ trả ra.
     public class StubDAO : DAO
     {
                 public string GetName(long id)
                 {
                              return "XDPM";
                 }
     } Le Van Long – FIT – HCMUS
18                                                         4/10/2011
STUB-VÍ DỤ (5)
     Dùng stub object để test các chức năng 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;
                }
19   } Le Van Long – FIT – HCMUS                          4/10/2011
STUB-VÍ DỤ (6)
     [TestFixture]
     public class PrintTest
     {
          Test]
          public void XDPMTest()
          {
                StubDAO stub = new StubDAO();
               string actualValue =
         PrintBill.Print(stub.GetName(0));
               Assert.That(actualValue, Is.EqualTo("Xay dung phan
         mem"));
          }
     }


20       Le Van Long – FIT – HCMUS                         4/10/2011
CÁCH SỬ DỤNG MOCK OBJECT
      Stubs


      Fakes

      Mock objects




21   Le Van Long – FIT – HCMUS   4/10/2011
VẤN ĐỀ
     Đôi khi chúng ta cần làm nhiều thứ hơn là chỉ trả về một
     giá trị (nhƣ trên) để có thể test đƣợc đoạn code chúng
     ta viết.
     Ví dụ:
     Có một file do chúng ta tạo ra tuân theo một format nào
     đó.
     Có một lớp đọc dữ liệu từ file này và cần kiểm tra xem
     việc đọc file đƣợc thực hiện đúng hay không:

22    Le Van Long – FIT – HCMUS                         4/10/2011
FAKE-VÍ DỤ (1)
     public class PhanTachFile
     {
          private FileStream _stream;
          public PhanTachFile(string fileName)
          {
               _stream = File.Open(fileName,
     FileMode.Open);
          }
          // Do something
     }
23    Le Van Long – FIT – HCMUS                  4/10/2011
NHẬN XÉT
      Để test đƣợc các phƣơng thức của lớp này cần một
     file thật từ ổ đĩa. Điều này vừa không cần thiết, vừa làm
     chậm tốc độ test.
     Giải pháp:




24    Le Van Long – FIT – HCMUS                          4/10/2011
FAKE-VÍ DỤ (2)
     private FileStream _stream;
     public PhanTachFile(string fileName)
     {
     #if TESTING
             _stream = new MemoryStream();
     //MemoryStream là một lớp trong .NET cho phép tạo
     ra một stream bên trong bộ nhớ chính.
     #else
              _stream = File.Open(fileName, FileMode.Open);
     #endif
     }
25    Le Van Long – FIT – HCMUS                        4/10/2011
FAKE LÀ GÌ?
     •Fake là một đối tƣợng giả lập các đối tƣợng thật.
     •Fake có phần cài đặt của nó (ví dụ nhƣ phần cài đặt
     của lớp MemoryStream trong ví dụ bên trên).
     •Fakes không đƣợc sử dụng cho mục đích tạo ra sản
     phẩm, nó chủ yếu giúp cho việc test đƣợc thực hiện
     nhanh hơn.
     •Ví dụ: MemoryStream, SQLite (một dạng in-memory
     database)…

26    Le Van Long – FIT – HCMUS                           4/10/2011
CÁCH SỬ DỤNG MOCK OBJECT
      Stubs


      Fakes


      Mock objects




27   Le Van Long – FIT – HCMUS   4/10/2011
MOCK OBJECT LÀ GÌ?
     •Mock object là một đối tƣợng cụ thể hóa một interface
     nào đó, trả về giá trị chúng ta muốn nó trả về và
     kiểm tra xem nó có hoạt động theo cách mà chúng
     ta mong muốn hay không.




28    Le Van Long – FIT – HCMUS                        4/10/2011
CÁCH SỬ DỤNG MOCK
     OBJECTS TRONG NUNIT
     •Bƣớc 1: Add reference đến thƣ viện nunit.mocks.dll
     nằm trong thƣ mục cài đặt (..binnet 2.0framework).

     •Bƣớc 2: Using NUnit.Mocks trong chƣơng trình.


     •Bƣớc 3: Viết code sử dụng mock object. Lƣu ý khởi tạo
     các expectation cho mock object.


29    Le Van Long – FIT – HCMUS                         4/10/2011
MOCK-VÍ DỤ (1)
     Trở lại ví dụ về lớp DAO ở phần Stub, chúng ta sẽ test
     phƣơng thức PrintBill bằng cách sử dụng một mock
     object thay cho lớp DAO thật nhƣ sau:




30    Le Van Long – FIT – HCMUS                         4/10/2011
MOCK-VÍ DỤ (2)
     using NUnit.Mocks;
     [Test]
     public void XDPMTest_UsingMock()
     {
        DynamicMock mockController = new DynamicMock(typeof(DAO));
        DAO mockDAO = mockController.MockInstance as DAO;

          // Set up expectation
          mockController.ExpectAndReturn("GetName",    // Tên phương thức
                                          string.Empty,// Giá trị trả về
                                          0);          // Đối số mong
         muốn, là    null nếu muốn phương thức nhận bất kì đối số nào
           // Exercise test
          string actualValue = PrintBill.Print(mockDAO.GetName(1));

          mockController.Verify(); // Kiểm tra các expections có được
         thực hiện hay không?
          Assert.That(actualValue, Is.EqualTo("Xay dung phan mem"));
31   }   Le Van Long – FIT – HCMUS                                4/10/2011
MOCK-VÍ DỤ (3) – KẾT QUẢ




32   Le Van Long – FIT – HCMUS   4/10/2011
NHẬN XÉT
     •Test fail không phải do kết quả trả về của phƣơng thức
     Print sai mà do giá trị truyền vào phƣơng thức
     GetName không đúng với expectation (Expected: 0, But
     was: 1).
     • Ngoài việc kiểm tra đƣợc trạng thái (state verification),
     tức là giá trị các biến trƣớc và sau khi thực hiện hàm
     giống nhƣ stub, mock object còn kiểm tra đƣợc hành vi
     (behavior verification) hay tƣơng tác (interaction
     verification), tức là cách thức mà các phƣơng thức
     đƣợc gọi thực hiện. => Đây là điểm khác biệt lớn nhất
     giữa stub và mock.
33    Le Van Long – FIT – HCMUS                            4/10/2011
MỘT SỐ PHƢƠNG THỨC
     KHÁC CỦA LỚP DynamicMock
 Tên phương thức                    Công dụng

 ExpectNoCall(string methodName) Mong muốn phƣơng thức methodName
                                 không đƣợc gọi. Nếu phƣơng thức này
                                 đƣợc gọi, test sẽ fail.
 ExpectAndThrow(string              Giống ExpectAndReturn. Thay vì trả về 1 giá
 methodName, Exception              trị, throw ra một Exception để kiểm tra hệ
 exception, param sobject[] args)   thống xử lý Exception có hoạt động tốt hay
                                    không.
 SetReturnValue(string              Thiết đặt cho phƣơng thức methodName
 methodName, object returnValue)    luôn luôn trả về một giá trị.

34    Le Van Long – FIT – HCMUS                                      4/10/2011
TÓM TẮT
Đặc tính    Fake                    Stub                      Mock

Cách        Thay thế những đối      Cụ thể hóa 1 interface,   Cụ thể hóa 1 interface nhƣng
thực hiện   tƣợng thật bằng         cho các phƣơng thức       chỉ ra các phƣơng thức nào
            những đối tƣợng có      trả về các giá trị cố     muốn hoặc không muốn đƣợc
            chức năng tƣơng         định.                     thực hiện, cách thức thực hiện,
            đƣơng.                                            giá trị trả về (nếu có) và đối số
                                                              mong muốn (nếu có). (Dynamic
                                                              mock)
Mục đích                             Thay thế cho các đối tƣợng thật.

            Giúp cho việc test      Kiểm soát đầu vào của Kiểm tra đầu ra của SUT (giá trị
            đƣợc thực hiện nhanh    thành phần đƣợc test   trả về, cách thức gọi thực hiện
            hơn hoặc giả lập các    (System Under Test –   phƣơng thức…)
            đối tƣợng không có      SUT). Bắt buộc SUT
            thật.                   phải đi theo con đƣờng
                                    mà chúng ta muốn.
Phân loại                    Static mock                      Dynamic mock


Loại kiểm       Kiểm tra trạng thái (tình trạng các biến      Kiểm tra trạng thái và hành vi
tra             trƣớc/sau khi thực hiện phƣơng thức).         (cách thức các phƣơng thức
                                                              đƣợc gọi thực hiện)
35     Le Van Long – FIT – HCMUS                                                   4/10/2011
THAM KHẢO
     • Andrew Hunt, David Thomas with Mart Hargett, “Pragmatic Unit
       Testing in C# with NUnit”, 2nd edition, 2007.

     • Martin Fowler, “Mocks Aren’t Stubs”, last update 02/01/2007,
       http://martinfowler.com/articles/mocksArentStubs.html

     • Gerard Meszaros, “Mocks, Fakes, Stubs and Dummies”, last
       update 24/07/2008,
       http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%2
       0Dummies.html

     • Diadora Alexandru, “Difference between Mocks and Stubs”, last
       update 21/04/2009,
       http://geekswithblogs.net/diadiora/archive/2009/04/21/difference-
       between-mocks-and-stubs.aspx
36   Le Van Long – FIT – HCMUS                                   4/10/2011

More Related Content

What's hot

Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởThuyet Nguyen
 
Bài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITBài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITNgô Doãn Tình
 
Tóm tắt về track, sector, cluster, cylinder
Tóm tắt về track, sector, cluster, cylinderTóm tắt về track, sector, cluster, cylinder
Tóm tắt về track, sector, cluster, cylinderhoamonkhach
 
Phân tích và thiết kế HTTT
Phân tích và thiết kế HTTTPhân tích và thiết kế HTTT
Phân tích và thiết kế HTTTLy hai
 
BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019
BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019
BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019TiLiu5
 
Bai03 he thong tap tin fat
Bai03   he thong tap tin fatBai03   he thong tap tin fat
Bai03 he thong tap tin fatVũ Sang
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3pisu412
 
Hệ PhâN TáN
Hệ PhâN TáNHệ PhâN TáN
Hệ PhâN TáNit
 
tổng hợp bài tập java có đáp án chi tiết
 tổng hợp bài tập java có đáp án chi tiết tổng hợp bài tập java có đáp án chi tiết
tổng hợp bài tập java có đáp án chi tiếtHoàng Trí Phan
 
Hệ điều hành (chương 2)
Hệ điều hành (chương 2)Hệ điều hành (chương 2)
Hệ điều hành (chương 2)realpotter
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinVõ Phúc
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHai Rom
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Nhóc Nhóc
 
Fase 2 trabajo colaborativobase de datos basicos
Fase 2 trabajo colaborativobase de datos  basicosFase 2 trabajo colaborativobase de datos  basicos
Fase 2 trabajo colaborativobase de datos basicosLuIsAVera15
 

What's hot (20)

Sql server chuong 2 nkhanh
Sql server chuong 2 nkhanhSql server chuong 2 nkhanh
Sql server chuong 2 nkhanh
 
Báo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mởBáo cáo môn mã nguồn mở
Báo cáo môn mã nguồn mở
 
Bài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PITBài Giảng Vi Xử Lý PIT
Bài Giảng Vi Xử Lý PIT
 
Tóm tắt về track, sector, cluster, cylinder
Tóm tắt về track, sector, cluster, cylinderTóm tắt về track, sector, cluster, cylinder
Tóm tắt về track, sector, cluster, cylinder
 
Phân tích và thiết kế HTTT
Phân tích và thiết kế HTTTPhân tích và thiết kế HTTT
Phân tích và thiết kế HTTT
 
BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019
BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019
BÀI GIẢNG THIẾT KẾ, XÂY DỰNG MẠNG_10433312092019
 
Hop ngu mips
Hop ngu mipsHop ngu mips
Hop ngu mips
 
Bai03 he thong tap tin fat
Bai03   he thong tap tin fatBai03   he thong tap tin fat
Bai03 he thong tap tin fat
 
Co so du lieu
Co so du lieuCo so du lieu
Co so du lieu
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
--De cuong on tap hdh
 --De cuong on tap hdh --De cuong on tap hdh
--De cuong on tap hdh
 
Hệ PhâN TáN
Hệ PhâN TáNHệ PhâN TáN
Hệ PhâN TáN
 
Đề tài: Xây dựng hệ thống thông tin quản lý quầy thuốc tại bệnh viện
Đề tài: Xây dựng hệ thống thông tin quản lý quầy thuốc tại bệnh việnĐề tài: Xây dựng hệ thống thông tin quản lý quầy thuốc tại bệnh viện
Đề tài: Xây dựng hệ thống thông tin quản lý quầy thuốc tại bệnh viện
 
tổng hợp bài tập java có đáp án chi tiết
 tổng hợp bài tập java có đáp án chi tiết tổng hợp bài tập java có đáp án chi tiết
tổng hợp bài tập java có đáp án chi tiết
 
Hệ điều hành (chương 2)
Hệ điều hành (chương 2)Hệ điều hành (chương 2)
Hệ điều hành (chương 2)
 
Giáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tinGiáo trình phân tích thiết kế hệ thống thông tin
Giáo trình phân tích thiết kế hệ thống thông tin
 
Hd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanhHd th sql server_tuan5_n_khanh
Hd th sql server_tuan5_n_khanh
 
Lập trình Python cơ bản
Lập trình Python cơ bảnLập trình Python cơ bản
Lập trình Python cơ bản
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05
 
Fase 2 trabajo colaborativobase de datos basicos
Fase 2 trabajo colaborativobase de datos  basicosFase 2 trabajo colaborativobase de datos  basicos
Fase 2 trabajo colaborativobase de datos basicos
 

Similar to Mock object

Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT Cusanlui
 
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu quaLê Anh
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Hoàng Hà
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Hoàng Hà
 
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#MasterCode.vn
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09xcode_esvn
 
Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượngHưởng Nguyễn
 
PMMNM.docx
PMMNM.docxPMMNM.docx
PMMNM.docxNgnHng26
 

Similar to Mock object (20)

Oop 0
Oop 0Oop 0
Oop 0
 
Oop 2
Oop 2Oop 2
Oop 2
 
Oop 7
Oop 7Oop 7
Oop 7
 
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT
 
Oop 8
Oop 8Oop 8
Oop 8
 
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu qua
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02
 
Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02Bai06interface 130622091935-phpapp02
Bai06interface 130622091935-phpapp02
 
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
Bài 6 - Interface - Nền tảng lập trình ứng dụng với C#
 
15 Design pattern - Kiến trúc và thiết kế phần mềm PTIT
15 Design pattern - Kiến trúc và thiết kế phần mềm PTIT15 Design pattern - Kiến trúc và thiết kế phần mềm PTIT
15 Design pattern - Kiến trúc và thiết kế phần mềm PTIT
 
Lab lap trinhmang_v3
Lab lap trinhmang_v3Lab lap trinhmang_v3
Lab lap trinhmang_v3
 
Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09Lap trinh huong_doi_tuong_cpp_dhct_lesson09
Lap trinh huong_doi_tuong_cpp_dhct_lesson09
 
Lappj trình hướng đối tượng
Lappj trình hướng đối tượngLappj trình hướng đối tượng
Lappj trình hướng đối tượng
 
PMMNM.docx
PMMNM.docxPMMNM.docx
PMMNM.docx
 
Unit Test
Unit TestUnit Test
Unit Test
 
Laravel testing
Laravel testingLaravel testing
Laravel testing
 
Oop 5
Oop 5Oop 5
Oop 5
 
Oop 1
Oop 1Oop 1
Oop 1
 
Phan 1 sv
Phan 1   svPhan 1   sv
Phan 1 sv
 
Oop 3
Oop 3Oop 3
Oop 3
 

Recently uploaded

30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢIPHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢImyvh40253
 
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-KhnhHuyn546843
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxhoangvubaongoc112011
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgspowerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgsNmmeomeo
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảohoanhv296
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...Nguyen Thanh Tu Collection
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh chonamc250
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfNguyen Thanh Tu Collection
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...Nguyen Thanh Tu Collection
 
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quanGNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quanmyvh40253
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 

Recently uploaded (20)

30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢIPHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
 
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgspowerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh cho
 
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
3-BẢNG MÃ LỖI CỦA CÁC HÃNG ĐIỀU HÒA .pdf - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
 
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
ĐỀ CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT CÁC TỈNH THÀNH NĂM HỌC 2020 –...
 
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quanGNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
GNHH và KBHQ - giao nhận hàng hoá và khai báo hải quan
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 

Mock object

  • 1. Unit test và NUnit SỬ DỤNG MOCK OBJECT TRONG UNIT TESTING Trình bày: Nhóm 13, 14, 15 1 Le Van Long – FIT – HCMUS 4/10/2011
  • 2. NỘI DUNG  Mock object là gì?  Phân loại mock object.  Lợi ích của mock object.  Cách sử dụng mock object. 2 Le Van Long – FIT – HCMUS 4/10/2011
  • 3. NỘI DUNG  Mock object là gì?  Phân loại mock object.  Lợi ích của mock object.  Cách sử dụng mock object. 3 Le Van Long – FIT – HCMUS 4/10/2011
  • 4. ĐỊNH NGHĨA A mock object is simply a testing replacement for a real- world object. Andy Hunt, David Thomas – Pragmatic unit testing in C# with NUnit, 2nd edition, p91. Mock Objects are a technique that allow you to isolate classes from their dependencies for testing purposes. Geoff Lane 4 Le Van Long – FIT – HCMUS 4/10/2011
  • 5. NỘI DUNG  Mock object là gì?  Phân loại mock object.  Lợi ích của mock object.  Cách sử dụng mock object. 5 Le Van Long – FIT – HCMUS 4/10/2011
  • 6. PHÂN LOẠI • Static mock: đƣợc viết bằng tay hay phát sinh tự động ở một bƣớc nào đó trong chƣơng trình. • Dynamic mock: phụ thuộc vào proxy interface. 6 Le Van Long – FIT – HCMUS 4/10/2011
  • 7. NỘI DUNG  Mock object là gì?  Phân loại mock object.  Lợi ích của mock object.  Cách sử dụng mock object. 7 Le Van Long – FIT – HCMUS 4/10/2011
  • 8. LỢI ÍCH Mock object đƣợc sử dụng trong các trƣờng hợp sau: Đối tƣợng thật có những hành vi không đoán biết đƣợc. Ví dụ: tỉ giá trên thị trƣờng chứng khoán. Đối tƣợng thật khó cài đặt. Ví dụ: môi trƣờng mạng. Đối tƣợng thật chậm. 8 Le Van Long – FIT – HCMUS 4/10/2011
  • 9. LỢI ÍCH (tt) Đối tƣợng thật có/là giao diện ngƣời dùng. Việc kiểm chứng cần biết một đối tƣợng thật đƣợc sử dụng nhƣ thế nào? Ví dụ, việc kiểm chứng cần biết một hàm callback có đƣợc gọi hay không? Đối tƣợng thật không tồn tại. 9 Le Van Long – FIT – HCMUS 4/10/2011
  • 10. NỘI DUNG  Mock object là gì?  Phân loại mock object.  Lợi ích của mock object.  Cách sử dụng mock object. 10 Le Van Long – FIT – HCMUS 4/10/2011
  • 11. CÁCH SỬ DỤNG MOCK OBJECT  Stubs  Fakes  Mock objects 11 Le Van Long – FIT – HCMUS 4/10/2011
  • 12. CÁCH SỬ DỤNG MOCK OBJECT  Stubs  Fakes  Mock objects 12 Le Van Long – FIT – HCMUS 4/10/2011
  • 13. STUB Bƣớc 1: Sử dụng interfaces để mô tả những phƣơng thức của đối tƣợng. Bƣớc 2: Cài đặt interface cho production code. Bƣớc 3: Cài đặt interface cho mock object. 13 Le Van Long – FIT – HCMUS 4/10/2011
  • 14. STUBS INTERFACE REAL STUB CLASS CLASS TESTED FUNCTION 14 Le Van Long – FIT – HCMUS 4/10/2011
  • 15. STUB-VÍ DỤ (1) Có một lớp truy xuất CSDL: public class RealDAO { public string GetName(long id) { // Do something } } 15 Le Van Long – FIT – HCMUS 4/10/2011
  • 16. STUB-VÍ DỤ (2) Từ những phƣơng thức cần giả lập, rút ra interface. public interface DAO { string GetName(long id); } 16 Le Van Long – FIT – HCMUS 4/10/2011
  • 17. STUB-VÍ DỤ (3) Áp dụng interface này cho lớp mình muốn giả lập (cho lớp này kế thừa interface). public class RealDAO : DAO { public string GetName(long id) { // Do something } 17 } Le Van Long – FIT – HCMUS 4/10/2011
  • 18. STUB-VÍ DỤ (4) Cho lớp stub kế thừa từ interface này. Cho phƣơng thức trả về một giá trị giả mà chúng ta nghĩ chƣơng trình sẽ trả ra. public class StubDAO : DAO { public string GetName(long id) { return "XDPM"; } } Le Van Long – FIT – HCMUS 18 4/10/2011
  • 19. STUB-VÍ DỤ (5) Dùng stub object để test các chức năng 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; } 19 } Le Van Long – FIT – HCMUS 4/10/2011
  • 20. STUB-VÍ DỤ (6) [TestFixture] public class PrintTest { Test] public void XDPMTest() { StubDAO stub = new StubDAO(); string actualValue = PrintBill.Print(stub.GetName(0)); Assert.That(actualValue, Is.EqualTo("Xay dung phan mem")); } } 20 Le Van Long – FIT – HCMUS 4/10/2011
  • 21. CÁCH SỬ DỤNG MOCK OBJECT  Stubs  Fakes  Mock objects 21 Le Van Long – FIT – HCMUS 4/10/2011
  • 22. VẤN ĐỀ Đôi khi chúng ta cần làm nhiều thứ hơn là chỉ trả về một giá trị (nhƣ trên) để có thể test đƣợc đoạn code chúng ta viết. Ví dụ: Có một file do chúng ta tạo ra tuân theo một format nào đó. Có một lớp đọc dữ liệu từ file này và cần kiểm tra xem việc đọc file đƣợc thực hiện đúng hay không: 22 Le Van Long – FIT – HCMUS 4/10/2011
  • 23. FAKE-VÍ DỤ (1) public class PhanTachFile { private FileStream _stream; public PhanTachFile(string fileName) { _stream = File.Open(fileName, FileMode.Open); } // Do something } 23 Le Van Long – FIT – HCMUS 4/10/2011
  • 24. NHẬN XÉT  Để test đƣợc các phƣơng thức của lớp này cần một file thật từ ổ đĩa. Điều này vừa không cần thiết, vừa làm chậm tốc độ test. Giải pháp: 24 Le Van Long – FIT – HCMUS 4/10/2011
  • 25. FAKE-VÍ DỤ (2) private FileStream _stream; public PhanTachFile(string fileName) { #if TESTING _stream = new MemoryStream(); //MemoryStream là một lớp trong .NET cho phép tạo ra một stream bên trong bộ nhớ chính. #else _stream = File.Open(fileName, FileMode.Open); #endif } 25 Le Van Long – FIT – HCMUS 4/10/2011
  • 26. FAKE LÀ GÌ? •Fake là một đối tƣợng giả lập các đối tƣợng thật. •Fake có phần cài đặt của nó (ví dụ nhƣ phần cài đặt của lớp MemoryStream trong ví dụ bên trên). •Fakes không đƣợc sử dụng cho mục đích tạo ra sản phẩm, nó chủ yếu giúp cho việc test đƣợc thực hiện nhanh hơn. •Ví dụ: MemoryStream, SQLite (một dạng in-memory database)… 26 Le Van Long – FIT – HCMUS 4/10/2011
  • 27. CÁCH SỬ DỤNG MOCK OBJECT  Stubs  Fakes  Mock objects 27 Le Van Long – FIT – HCMUS 4/10/2011
  • 28. MOCK OBJECT LÀ GÌ? •Mock object là một đối tƣợng cụ thể hóa một interface nào đó, trả về giá trị chúng ta muốn nó trả về và kiểm tra xem nó có hoạt động theo cách mà chúng ta mong muốn hay không. 28 Le Van Long – FIT – HCMUS 4/10/2011
  • 29. CÁCH SỬ DỤNG MOCK OBJECTS TRONG NUNIT •Bƣớc 1: Add reference đến thƣ viện nunit.mocks.dll nằm trong thƣ mục cài đặt (..binnet 2.0framework). •Bƣớc 2: Using NUnit.Mocks trong chƣơng trình. •Bƣớc 3: Viết code sử dụng mock object. Lƣu ý khởi tạo các expectation cho mock object. 29 Le Van Long – FIT – HCMUS 4/10/2011
  • 30. MOCK-VÍ DỤ (1) Trở lại ví dụ về lớp DAO ở phần Stub, chúng ta sẽ test phƣơng thức PrintBill bằng cách sử dụng một mock object thay cho lớp DAO thật nhƣ sau: 30 Le Van Long – FIT – HCMUS 4/10/2011
  • 31. MOCK-VÍ DỤ (2) using NUnit.Mocks; [Test] public void XDPMTest_UsingMock() { DynamicMock mockController = new DynamicMock(typeof(DAO)); DAO mockDAO = mockController.MockInstance as DAO; // Set up expectation mockController.ExpectAndReturn("GetName", // Tên phương thức string.Empty,// Giá trị trả về 0); // Đối số mong muốn, là null nếu muốn phương thức nhận bất kì đối số nào // Exercise test string actualValue = PrintBill.Print(mockDAO.GetName(1)); mockController.Verify(); // Kiểm tra các expections có được thực hiện hay không? Assert.That(actualValue, Is.EqualTo("Xay dung phan mem")); 31 } Le Van Long – FIT – HCMUS 4/10/2011
  • 32. MOCK-VÍ DỤ (3) – KẾT QUẢ 32 Le Van Long – FIT – HCMUS 4/10/2011
  • 33. NHẬN XÉT •Test fail không phải do kết quả trả về của phƣơng thức Print sai mà do giá trị truyền vào phƣơng thức GetName không đúng với expectation (Expected: 0, But was: 1). • Ngoài việc kiểm tra đƣợc trạng thái (state verification), tức là giá trị các biến trƣớc và sau khi thực hiện hàm giống nhƣ stub, mock object còn kiểm tra đƣợc hành vi (behavior verification) hay tƣơng tác (interaction verification), tức là cách thức mà các phƣơng thức đƣợc gọi thực hiện. => Đây là điểm khác biệt lớn nhất giữa stub và mock. 33 Le Van Long – FIT – HCMUS 4/10/2011
  • 34. MỘT SỐ PHƢƠNG THỨC KHÁC CỦA LỚP DynamicMock Tên phương thức Công dụng ExpectNoCall(string methodName) Mong muốn phƣơng thức methodName không đƣợc gọi. Nếu phƣơng thức này đƣợc gọi, test sẽ fail. ExpectAndThrow(string Giống ExpectAndReturn. Thay vì trả về 1 giá methodName, Exception trị, throw ra một Exception để kiểm tra hệ exception, param sobject[] args) thống xử lý Exception có hoạt động tốt hay không. SetReturnValue(string Thiết đặt cho phƣơng thức methodName methodName, object returnValue) luôn luôn trả về một giá trị. 34 Le Van Long – FIT – HCMUS 4/10/2011
  • 35. TÓM TẮT Đặc tính Fake Stub Mock Cách Thay thế những đối Cụ thể hóa 1 interface, Cụ thể hóa 1 interface nhƣng thực hiện tƣợng thật bằng cho các phƣơng thức chỉ ra các phƣơng thức nào những đối tƣợng có trả về các giá trị cố muốn hoặc không muốn đƣợc chức năng tƣơng định. thực hiện, cách thức thực hiện, đƣơng. giá trị trả về (nếu có) và đối số mong muốn (nếu có). (Dynamic mock) Mục đích Thay thế cho các đối tƣợng thật. Giúp cho việc test Kiểm soát đầu vào của Kiểm tra đầu ra của SUT (giá trị đƣợc thực hiện nhanh thành phần đƣợc test trả về, cách thức gọi thực hiện hơn hoặc giả lập các (System Under Test – phƣơng thức…) đối tƣợng không có SUT). Bắt buộc SUT thật. phải đi theo con đƣờng mà chúng ta muốn. Phân loại Static mock Dynamic mock Loại kiểm Kiểm tra trạng thái (tình trạng các biến Kiểm tra trạng thái và hành vi tra trƣớc/sau khi thực hiện phƣơng thức). (cách thức các phƣơng thức đƣợc gọi thực hiện) 35 Le Van Long – FIT – HCMUS 4/10/2011
  • 36. THAM KHẢO • Andrew Hunt, David Thomas with Mart Hargett, “Pragmatic Unit Testing in C# with NUnit”, 2nd edition, 2007. • Martin Fowler, “Mocks Aren’t Stubs”, last update 02/01/2007, http://martinfowler.com/articles/mocksArentStubs.html • Gerard Meszaros, “Mocks, Fakes, Stubs and Dummies”, last update 24/07/2008, http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%2 0Dummies.html • Diadora Alexandru, “Difference between Mocks and Stubs”, last update 21/04/2009, http://geekswithblogs.net/diadiora/archive/2009/04/21/difference- between-mocks-and-stubs.aspx 36 Le Van Long – FIT – HCMUS 4/10/2011

Editor's Notes

  1. Đây là 2 khái niệm khó hiểu. Sau khi xem hết slide, các bạn sẽ hiểu được nó.
  2. Tạm sử dụng khái niệm stub class/stub object để chỉ lớp/đối tượng kế thừa từ một interface theo phương pháp Stub.Về mặt ngữ nghĩa, stub có nghĩa là gốc.
  3. Hiện tại chúng ta chưa có CSDL hoặc phương thức GetName viết chưa xong + việc truy xuất ổ đĩa chậm.
  4. MemoryStream là một lớp trong .NET cho phép tạo ra một stream bên trong bộ nhớ chính.Đoạn code trên cần phải design lại để có thể test tốt hơn. Chi tiết xem tại tài liệu tham khảo.
  5. Lưu ý: khái niệm mock object ban đầu là khái niệm chung, cơ bản. Ở đây sẽ giới thiệu cụ thể về mock object cùng với framework của nó, cụ thể ở đây là mock framework của NUnit.Trong lập trình hướng đối tượng của C#, khái niệm interface gần giống với khái niệm lớp cha thuần ảo của C++.