2012-10-31 35 views
5

Tôi muốn lặp lại một XmlNodeList. Làm thế nào để bạn thử một XmlNodeList trong Moq, vì vậy bạn có thể vòng qua nó như thế nào trong một vòng lặp foreach:Vòng lặp forocking với Moq

 foreach (XmlNode xmlNode in nodes) 
     { 
      //Do something with node 
     } 

Tôi đã cố gắng để thiết lập thông qua một phương pháp SetupSequence, nhưng tôi đã không thể để tạo ra các mong muốn giả.

+1

Hơi khó hiểu những gì bạn đang cố gắng đạt được thông qua thử nghiệm này, tuy nhiên bạn có thể cân nhắc thử nghiệm tích hợp ở đây thay vì kiểm tra đơn vị, cung cấp biểu diễn chuỗi xml của bạn và kiểm tra vòng lặp của bạn dữ liệu. – nieve

+0

Bạn đúng về tôi đang ở trong khu vực màu xám đó, nơi bạn có thể thảo luận về giá trị của một thử nghiệm đơn vị thực sự. Tuy nhiên, điều này có thể hữu ích trong các khu vực không màu xám khác. Tôi sẽ không chạy vào cùng một vấn đề với tất cả các vòng foreach? – Morten

+0

Sự khác biệt là những gì bạn đang lặp trên tài liệu xml phức tạp hơn bất kỳ bộ sưu tập nào khác và do đó có thể không phải là ứng cử viên tốt nhất cho một bài kiểm tra đơn vị đơn giản, rõ ràng tùy thuộc vào những gì bạn đang cố kiểm tra chính xác. Ngoài ra, câu hỏi này có thể là một chỉ báo tốt cho bạn để suy nghĩ lại thiết kế của bạn? Chỉ là một ý nghĩ. – nieve

Trả lời

9

Các foreach cuộc gọi GetEnumerator dưới mui xe và đó là những gì bạn cần để chế nhạo:

var xmlNodesMock = new Mock<XmlNodeList>(); 
xmlNodesList 
    .Setup(l => l.GetEnumerator()) 
    .Returns(new XmlNode[] { /* values go here */ }.GetEnumerator()); 

Đương nhiên bạn cần phải khởi tạo XmlNode mảng trong Returns phương pháp với giá trị thực tế. Hãy ghi nhớ rằng danh sách giả đã được tiêm vào phương pháp thử nghiệm, để bạn có thể thay thế thực hiện thực tế.

Các vấn đề liên quan