2011-09-13 3 views
10

Tôi đang cố gắng xem liệu Moq có phải là thứ tôi muốn sử dụng trong một dự án mới như các khuôn khổ giả mạo khác mà tôi đã sử dụng là IMHO đầy thử thách hay không. Vì vậy, ví dụ, tôi có một phương pháp như vậy:Người mới đang cố gắng sử dụng Moq cho phương pháp đếm được

IEnumerable<PickList> GetPickLists(); 

Tôi không chắc chắn làm thế nào tôi phải giả này ... Tôi đã thử một cái gì đó như thế này, nhưng tôi nhận được lỗi compliation (tôi biết Returns sau() là không đúng, nhưng không thể tìm ra những gì để đưa vào các Returns cơ thể:

var mockCrm = new Mock<ICrmProvider>(); 
mockCrm.Setup<IEnumerable<PickList>>(foo => foo.GetPickLists()) 
       .Returns<IEnumerable<PickList>>({}); 

Ngoài ra, cố gắng để thử một cái gì đó giống như hai phương pháp:

CustomerSyncResult ApplyActions(IEnumerable<CustomerAction> actions); 
IEnumerable<Customer> GetCustomers(IEnumerable<string> crmIDs, IEnumerable<string> emails); 

Tôi biết tôi đang hỏi g một câu hỏi chăn, nhưng tôi đang có một heck của một thời gian bắt đầu. CHM trong tải xuống không có đủ mẫu cho tôi và một số hướng dẫn có vẻ như đang sử dụng các phương pháp lỗi thời cũng như không bao gồm các liệt kê khiến nó khó khăn đối với tôi: (

Mọi lời khuyên sẽ được đánh giá cao .

Trả lời

11

Hãy thử

mockCrm.Setup(x => x.GetPickLists()) 
    .Returns(new List<PickList>()); 

các QuickStart là một tài liệu tham khảo tốt

một số ví dụ cho các phương pháp khác:.

mockCrm.Setup(x => x.ApplyActions(It.IsAny<IEnumerable>())) 
    .Returns(new CustomerSyncResult()); 

mockCrm.Setup(x => x.GetCustomers(It.IsAny<IEnumerable>(), 
            It.IsAny<IEnumerable>())) 
    .Returns(new List<Customers>()); 

Như một sang một bên, làm cho tổng thể IEnumerable trong giao diện ban đầu của bạn cho an toàn loại tốt hơn.

Bạn cũng có thể sử dụng Moq mới v4 đặc tả chức năng:

var list = new List<PickList> { new PickList() }; 

ICrmProvider crm = 
    Mock.Of<ICrmProvider>(
     x => 
     x.GetPickLists() == list); 

Đó không phải là cũng đang ghi nhận. Lưu ý rằng bạn không còn phải viết mock.Object nữa. Một số liên kết:

Cú pháp chính xác (sử dụng It.Is, các nội dung của danh sách, vv) sẽ phụ thuộc vào những gì bạn đang cố gắng để đạt được. It.IsAny sẽ khớp với bất kỳ đối số nào, điều này sẽ giúp mọi việc trở nên dễ dàng hơn khi xử lý các tham số chuỗi hoặc tập hợp.

+0

Tuyệt vời ... cảm ơn! Bắt đầu với gel ... –

+0

Gắn bó với nó; đó là một thư viện tuyệt vời. Bạn có thể nhập các tệp DLL vào [LINQPad] (http://www.linqpad.net/) và chơi xung quanh với các loại chế nhạo nếu bạn muốn. – TrueWill

+0

Câu hỏi tiếp theo ... nếu đối tượng bạn đang mô phỏng yêu cầu tham số trong hàm tạo. Ví dụ: khách hàng công cộngSyncEngine (ILoggingProvider loggingProvider, ICrmProvider crmProvider, ICacheProvider cacheProvider) Làm thế nào để bạn nhận được thông số của hàm tạo trong đó? –