Mous

2012-10-31 3 views
5
ile foreach döngüsünü alaylama

Bir XmlNodeList'e bir döngü geçirmeyi istiyorum. Nasıl Moq bir XmlNodeList alay ediyorsun böylece bir foreach döngüsü gibi içinden döngü yapabilirsiniz: Bir SetupSequence yöntemle kurmak için çalıştıkMous

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

ama yaratmak mümkün olmamıştır istenen alay.

+1

Bu sınama yoluyla elde etmeye çalıştığınız şeyi anlamak biraz zor, ancak bir birim sınaması yerine burada bir bütünleştirme testi yapmayı düşünmek, xml dizelerinizin temsilini sağlamak ve döngüsünüzü gerçekte test etmek isteyebilirsiniz. veri. – nieve

+0

Gerçek bir birim testinin değerini tartışabileceğiniz o gri bölgede olduğum konusunda haklısınız. Ancak, bu diğer gri olmayan alanlarda da yararlı olabilir. Tüm foreach döngülerinde aynı problemle karşılaşmayacağım mı? – Morten

+0

Aradaki fark, xml belgesinin diğer koleksiyonlardan daha karmaşık olmasıdır ve bu nedenle, tam olarak test etmeye çalıştığınız şeye bağlı olarak, basit bir birim testi için en iyi aday olmayabilir. Ayrıca, bu soru tasarımınızı yeniden düşünmeniz için iyi bir gösterge olabilir mi? Sadece bir düşünce. – nieve

cevap

9
başlık altında

foreach aramalar GetEnumerator ve sizin alay etmek gerekenler:

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

Doğal olarak gerçek değerleri ile Returns yöntemde XmlNode diziyi başlatmak gerekiyor. Sahte listenin test edilen yönteme enjekte edilmesi gerektiğini unutmayın, böylece gerçek uygulamayı değiştirebilirsiniz.