2009-08-29 11 views
5

Piszę testy jednostek sterowane danymi przy użyciu źródła danych Xml w C# VS2008.Rozszerzanie Microsoft.VisualStudio.TestTools.DataSource.XML

Atrybuty wyglądają mniej więcej tak i wszystko działa niesamowicie.

[DeploymentItem("HtmlSchemaUrls.xml")] 
    [DataSource("DataSource", "Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\HtmlSchemaUrls.xml", Microsoft.VisualStudio.TestTools.WebTesting.DataBindingAccessMethod.Sequential, "URL")] 
    [DataBinding("DataSource", "URL", "URL_Text", "DataSource.URL.URL_Text")] 
    [TestMethod] 

Chciałbym rozszerzyć możliwości źródła danych Microsoft.VisualStudio.TestTools.DataSource.XML, preferrably konfigurowalne przez app.config. Na przykład, bool, gdy true, przejdę przez wszystkie wiersze w pliku Xml, a gdy false, przejdę tylko przez jeden.

Nie chcę wykonywać tego sprawdzenia w samym teście - mam 1000 przypadków testowych z tym wymaganiem.

Wszelkie wskazówki dotyczące tego, jak to osiągnąć, będą najbardziej mile widziane.

+1

coś wydaje się źle, jeśli masz 1000s testów, które uderzyły w system plików (szczerze mówiąc, w tym momencie przeprowadzasz testy integracyjne, nie testów jednostkowych). Możesz rozważyć wykonanie jakiegoś kpina lub szyderstwa w celu wyizolowania testowanego kodu w przypadkach, w których potrzebujesz tylko jednego wiersza kodu XML. – Michael

Odpowiedz

1

Użyj AssemblyInitialize, aby skopiować zestaw testowy XML z jakiegoś repozytorium zestawu testów.
1 - w ten sposób nie potrzebujesz [DeploymentItem ("HtmlSchemaUrls.xml")]
2 - zamiast tylko go skopiować, utwórz nowy plik zawierający rekordy, które należy przetestować (przy użyciu sparametryzowanego xsl?)
3 - wszystkie parametry dla tej operacji może być przechowywany w app.config

Skrócona przykład (za pomocą prostego kopiowania przygotowanie danych napędzane przypadku test env:

[AssemblyInitialize()] 
public static void AssemblyInit(TestContext context) 
{ 
    ... 
    string strRelocatedTestCaseFile = 
    Path.Combine(TheToolBox.ShortPath(AppDomain.CurrentDomain.BaseDirectory),                   
       "TestCase.xml"); 
    if(!string.IsNullOrEmpty(strTestCaseFile)) 
    { 
    string strMessage = "Copying TestCase input file: '" + 
         strTestCaseFile + "' to '" + strRelocatedTestCaseFile + "'"; 
    Console.WriteLine(strMessage); 
    File.Copy(strTestCaseFile, strRelocatedTestCaseFile, true); 
    } 
} 
+0

To jest dobry pomysł, ale odznacza się, ponieważ 'DataSource' wiąże dane ** przed ** AssemblyInitialize jest nawet uruchomiony. Test zawsze będzie zablokowany przy użyciu "starej" wersji pliku źródła danych. – Snixtor