2010-06-13 14 views

Odpowiedz

6

Jak sugeruje rwwilden, życie jest dużo łatwiejsze, jeśli używasz API opartego na strumieniu zamiast nazwy opartej na nazwach plików. Używanie szyderstwa nie jest tutaj zbytnio odpowiednie, IMO; nie robisz "testowania protokołów" - potrzebujesz tylko źródła danych.

Można również przeciążenie, która jest prosta metoda narzędzie:

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

Można było wtedy dość bezpiecznie nie Test że metoda - to nie ma istotnego logiki w nim, mimo wszystko.

Teraz mógł testu API oparte strumień przy użyciu ciąg zakodowane w kodzie, a następnie wywołanie Encoding.UTF8.GetBytes(xml)MemoryStream i budowanie wokół powstałego tablicy bajtów ... ale generalnie wolą używać oddzielnych plików danych w moim projekcie testowym. Ustaw typ zawartości na "zasób osadzony", a następnie użyj Assembly.GetManifestResourceStream, aby uzyskać strumień do pliku testowego.

Jeśli jednak jest to normalnie normalny plik XML, czy na pewno chcesz samemu wykonać parsowanie? Czy jest jakikolwiek powód, dla którego nie chcesz zostawiać tego w ramce i wyrażać swojego interfejsu API pod względem DOM API, LINQ do XML lub XmlReader?

+0

Dla każdego, kto jest zdezorientowany tym, jak działa ta ścieżka, wygląda na to, że wygląda to tak: 'Your.Project.Name.SubFolder.FileName.extension'. – crush

3

Wszystko co musisz zrobić, to znaleźć sposób, aby opowiedzieć swoją klasę co plik do odczytu. Więc zależy to trochę od tego, w jaki sposób twoja klasa jest zaimplementowana. Najprostszym rozwiązaniem byłoby coś takiego:

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); 
    ... 
} 

Chodzi o to, że w jakiś sposób zapewnić klasę jest testowane z pliku xml, który został utworzony i dla których wiesz co analizowania wyników można się spodziewać.

+0

Nie chcę sprawdzać odczytu pliku. Chcę tylko unitTest parsowania. Mock system może jakoś mi pomóc? –

+0

Może możesz podać kod metody lub klasy, którą chcesz przetestować? –

Powiązane problemy