2010-06-13 23 views

cevap

6

Örnek olarak, dosya tabanlı bir dosya yerine akış tabanlı bir API kullanıyorsanız, yaşam çok daha kolaydır. Alay kullanma burada çok uygun değil, IMO; "protokol testi" yapmıyorsunuz - sadece bir veri kaynağı istiyorsunuz.

Ayrıca basit bir yardımcı yöntemdir aşırı yüklenmeye sağlayabilir:

public Result ParseXml(string file) 
{ 
    using (Stream stream = File.OpenRead(file)) 
    { 
     return ParseXml(stream); 
    } 
} 

Yapabilirsin sonra yöntem makul güvenle değil testi - bu sonuçta, buna anlamlı mantığı vardır.

Şimdi olabilir Genellikle, sonra kodunda kodlanmış dize kullanarak Encoding.UTF8.GetBytes(xml) arayarak ve ortaya çıkan bayt dizisi etrafında MemoryStream bina ... ama tarafından akış tabanlı API ayrı veri dosyaları kullanmayı tercih testi benim test projemde. İçerik türünü "gömülü kaynak" olarak ayarlayın ve ardından test dosyasına bir akış elde etmek için Assembly.GetManifestResourceStream kullanın.

Eğer bu gerçekten normal bir XML dosyası olsa da, gerçekten ayrıştırmayı kendiniz yapmak ister misiniz? Bunu çerçeveye bırakmak ve API'nizi DOM API, XML için LINQ veya XmlReader açısından ifade etmek istememenizin bir nedeni var mı?

+0

Yolun burada nasıl çalıştığı hakkında kafa karıştırıcı başka biri için, Şunun gibi bir şey gibi görünüyor: "Your.Project.Name.SubFolder.FileName.extension". – crush

3

yapmanız gereken tek şey okumak için hangi dosya sınıfınızın anlatmak için bir yol bulmak. Yani sınıfınızın nasıl uygulandığına bağlı.

public class ClassToTest : IClassToTest 
{ 
    public Result ParseXml(Stream xml) 
    { 
     // Parse xml and return result. 
     return ...; 
    } 
} 

[Test] 
public void TestParseXml() 
{ 
    // Get xml stream to test from somewhere. 
    Stream xmlStream = ...; 

    // Call method to test. 
    var result = new ClassToTest().ParseXml(xmlStream); 

    // Assert results. 
    Assert.IsNotNull(result); 
    ... 
} 

fikir nasılsa oluşturduğunuz bir xml dosyası ile test ediyoruz sınıf sağlamak ve kendisi için beklemek sonuçlarını ayrıştırmak biliyorum ki: kolay yaklaşım böyle bir şey olurdu.

+0

Dosya okumasını kontrol etmek istemiyorum. Yalnızca birim ayrıştırmak istiyorum. Mock sistemi bir şekilde bana yardım edebilir mi? –

+0

Belki de test etmek istediğiniz yöntemin veya sınıfa ait bazı kodları sağlayabilirsiniz? –

İlgili konular