2009-02-23 24 views
21

Có thể truy cập tham số được sử dụng để thực hiện cuộc gọi đến một kỳ vọng giả khi lắp ráp đối tượng Returns không?Truy cập các đối số ban đầu của Expect() khi lắp ráp giá trị trong Returns()

Ở đây vẫn còn sơ khai cho các đối tượng có liên quan và cho rằng, tôi đang cố gắng để thử một Bộ sưu tập:

Class CollectionValue { 
    public Id { get; set; } 
} 
Class Collection { 
    private List<CollectionValue> AllValues { get; set; } 
    public List<CollectionValue> GetById(List<int> ids) { 
     return AllValues.Where(v => ids.Contains(v.Id)); 
    } 
} 

Cho một danh sách kiểm tra của CollectionValues ​​sẽ được sử dụng cho các đối tượng chế giễu, làm thế nào một đi về việc thiết lập một kỳ vọng sẽ xử lý mọi hoán vị có thể có của các ID trong danh sách CollectionValues ​​đó, bao gồm các cuộc gọi kết hợp các ID hiện có và các ID không tồn tại? Vấn đề của tôi xuất phát từ mong muốn thiết lập tất cả các kỳ vọng có thể có trong một cuộc gọi; nếu không thể truy cập vào thông số ban đầu, tôi có thể dễ dàng thiết lập đúng kỳ vọng chính xác mà tôi muốn thử nghiệm trong một cuộc gọi nhất định mỗi lần.

Đây là những gì tôi đã hy vọng làm, ở đâu "???" đại diện cho nơi mà nó sẽ được thuận tiện để có quyền truy cập vào các thông số sử dụng để gọi GetById (một trong đó đủ điều kiện hạn chế It.IsAny):

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())).Returns(???); 

Trả lời

61

Từ hướng dẫn moq quickstart:

// access invocation arguments when returning a value 
mock.Setup(x => x.Execute(It.IsAny<string>())) 
       .Returns((string s) => s.ToLower()); 

Những gợi ý do đó bạn có thể điền vào ??? như

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())) 
       .Returns((List<int> l) => //Do some stuff with l 
        ); 
Các vấn đề liên quan