2011-11-08 8 views
11

Tôi đang sử dụng MOQ để thực hiện cuộc gọi phương thức với danh sách trả về dự kiến. Phương thức của tôi trả về một danh sách nhưng tôi muốn giả lập danh sách mới mỗi khi phương thức được gọi. Những gì tôi đã làm như vậy cho đến nay:Làm thế nào để Mock trả về danh sách mới mỗi khi phương thức được gọi bằng cách sử dụng Moq

List<Correlation> expected = new List<Correlation> { new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }; 
Mock<IRPLValidator> selfMock = new Mock<IRPLValidator>(); 
selfMock.Setup(f => f.Validate()).Returns(expected); 

Những gì tôi đang cố gắng để đạt được là làm cho sự trở lại mô hình một danh sách mới mỗi khi method get được gọi là. Tôi đã thử điều này, nhưng đã không làm việc:

selfMock.Setup(f => f.Validate()).Returns(new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }); 

Vì đây không làm việc, tôi nghĩ có lẽ gọi lại là câu trả lời cho câu hỏi của tôi, nhưng tôi đã không tìm thấy bất kỳ ví dụ thích hợp cho reinitializing danh sách của tôi . Bất kỳ đề xuất nào? Khi bạn có thể tự hỏi tại sao tôi cần danh sách mới mỗi lần, vấn đề là tôi đang gọi phương thức trên các loại đối tượng khác nhau thực hiện một số thay đổi trong danh sách, tùy thuộc vào loại đối tượng. Bởi vì các mô hình cho tôi cùng một danh sách mỗi khi phương pháp được gọi, tôi luôn luôn sửa đổi cùng một đối tượng trong bộ nhớ vì vậy tôi không thể theo dõi những thay đổi tôi đang thực hiện trên đó.

Cảm ơn trước!

Trả lời

14
selfMock.Setup(f => f.Validate()).Returns(() => new List<Correlation>{ new Correlation() { Code = "SelfError1" }, new Correlation() { Code = "SelfError2" } }); 

Bạn cần phải biến giá trị bên trong hàm Trả về thành hàm. Phiên bản bạn đã thử tạo ra một danh sách duy nhất, sau đó trả về chỉ được sử dụng. Bằng cách này, danh sách được tạo ra mỗi lần khi trả về sẽ gọi hàm mỗi lần nó là cần thiết.

+0

Làm việc như một sự quyến rũ! Rất rất cảm ơn. Điều đó thật dễ dàng. –

+0

Cảm ơn bạn - một ngày nào đó tôi sẽ nhận được toàn bộ thứ đóng cửa này. – David

+0

Ước gì tôi đã tìm thấy điều này trước đó, lãng phí một ngày hôm qua tự hỏi tại sao danh sách của tôi không được cập nhật! Cảm ơn!!! – PmanAce

2

Trả về có Func <> (và nhiều lần nạp) đại diện làm tham số đầu vào, do đó bạn không thể chỉ định một số dữ liệu bên trong Phương thức trả về. chức năng sẽ được trả lại. Các giải pháp được cung cấp bởi Rangoric, sẽ làm việc tốt trong trường hợp của bạn.

+0

Cảm ơn bạn đã giải thích! –