2009-03-24 19 views
13

Tôi tiếp tục thấy điều này được đề cập đến trên DotNetKicks v.v. Tuy nhiên, không thể tìm ra chính xác nó là gì (bằng tiếng Anh) hoặc những gì nó làm? Tôi ngu ngốc, vì vậy nếu bạn có thể giải thích nó chỉ đơn giản là nó sẽ là tuyệt vời và tại sao tôi sẽ sử dụng nó (Nếu nó là cái gì tôi sử dụng) ???Moq là gì?

Cảm ơn

Trả lời

20

Moq là một khuôn khổ mocking cho C NET # /.. Nó được sử dụng trong kiểm tra đơn vị để cô lập lớp của bạn đang được thử nghiệm từ các phụ thuộc của nó và đảm bảo rằng các phương thức thích hợp trên các đối tượng phụ thuộc đang được gọi. Để biết thêm thông tin về chế nhạo, bạn có thể muốn xem bài viết trên Wikipedia về số Mock Objects.

Các khuôn khổ mocking khác (cho .NET) bao gồm TypeMock, RhinoMocks, nMock, .etc.

+0

Cảm ơn tuyệt vời ... Tôi nghĩ tôi cần đọc thêm về kiểm tra đơn vị nữa - Được đánh giá cao cảm ơn bạn – leen3o

+4

MOQ cũng là một thuật ngữ được sử dụng trong kinh doanh = "Số lượng đặt hàng tối thiểu": một sản phẩm có giá 100 đô la số lượng 5000 chiếc có thể thấp tới 20 đô la nếu bạn mua một triệu đơn vị. Đó là không có gì để làm với khoa học máy tính tôi biết! :) –

+0

Chính xác hơn, đó là một khung cách ly, vì không phải tất cả hàng giả đều là mocks. – StuperUser

3

Moq là một công cụ chế nhạo để thực hiện .Net TDD.

4

Trong tiếng Anh đơn giản, Moq là một thư viện mà khi bạn đưa vào dự án của bạn cung cấp cho bạn sức mạnh để làm đơn vị kiểm tra dễ cách thức. Tại sao? Bởi vì một hàm có thể gọi một hàm khác, sau đó một hàm khác và vân vân. Nhưng trong thực tế những gì là cần thiết, chỉ là giá trị trả lại từ cuộc gọi đầu tiên để tiến tới dòng tiếp theo. Moq giúp bỏ qua cuộc gọi thực tế của phương thức đó và thay vào đó bạn trả lại hàm mà hàm đó đang trả về. và xác minh sau khi tất cả các dòng mã đã thực hiện, những gì bạn mong muốn là những gì bạn nhận được hay không. Quá nhiều tiếng Anh, vì vậy đây là một ví dụ:

String Somethod() 
{ 
    IHelper help = new IHelper(); 
    String first = help.firstcall(); 
    String second= secondcall(first); 
    return second; 
} 

Bây giờ, đây first là cần thiết để cho secondcall(), nhưng bạn có thể không thực sự gọi help.firstcall() vì nó ở một số lớp khác. Vì vậy, Mocking được thực hiện, giả mạo phương pháp đó được gọi là:

[TestMethod] 
public void SomeMethod_TestSecond 
{ 
    mockedIHelper.Setup(x=>x.firstcall()).Returns("Whatever i want"); 
} 

đây, suy nghĩ, SetUP như giả mạo cuộc gọi phương thức, chúng tôi chỉ quan tâm đến Returns.