2010-02-18 8 views
6

Używam atrybutu NUnit 2.5.3 TestCaseSource i tworzenie fabryki do generowania moich testów. Coś takiego:NUnit TestCaseSource wartość przejścia do fabryki

[Test, TestCaseSource(typeof(TestCaseFactories), "VariableString")] 
public void Does_Pass_Standard_Description_Tests(string text) 
{ 
    Item obj = new Item(); 
    obj.Description = text; 
} 

Moje źródło to:

public static IEnumerable<TestCaseData> VariableString 
{ 
    get 
    { 
     yield return new TestCaseData(string.Empty).Throws(typeof(PreconditionException)) 
      .SetName("Does_Reject_Empty_Text"); 
     yield return new TestCaseData(null).Throws(typeof(PreconditionException)) 
      .SetName("Does_Reject_Null_Text"); 
     yield return new TestCaseData(" ").Throws(typeof(PreconditionException)) 
      .SetName("Does_Reject_Whitespace_Text"); 
    } 
} 

Co muszę być w stanie zrobić to dodać maksymalną kontrolę długości do zmiennej String, ale to maksymalna długość jest określona w kontrakty w badanej klasie. W naszym przypadku jest to prosta publiczna struktura:

Nie mogę znaleźć żadnego sposobu przekazania wartości do generatora przypadku testowego. Próbowałem statycznych wspólnych wartości i nie zostały one pobrane. Nie chcę zapisywać danych w pliku, ponieważ wtedy potrzebowałbym ponownie wygenerować ten plik za każdym razem, gdy zmieni się kod.

Chcę dodać następującą linię do mojego testcase:

yield return new TestCaseData(new string('A', MAX_LENGTH_HERE + 1)) 
    .Throws(typeof(PreconditionException)); 

Coś dość prosty w koncepcji, ale coś widzę, że nie da się zrobić. Jakieś sugestie?

Odpowiedz

2

Zmień parametr testu jako klasy zamiast ciągu. Tak jak poniżej:

public class StringTest { public string testString; public int maxLength; }

Następnie skonstruuj tę klasę, aby przekazać jako argument do konstruktora TestCaseData. W ten sposób możesz przekazać ciąg i dowolne inne argumenty, które lubisz.

Inną opcją jest sprawienie, aby test zawierał 2 argumenty w postaci ciągu i wzorca.

Następnie dla TestCaseData ("mystring", 255). Czy zdałeś sobie sprawę, że mogą mieć wiele argumentów?

Wayne

1

wychodził podobny problem jak twój i skończył pisanie małą Addin NUnit i atrybut niestandardowy, który rozszerza NUnit TestCaseSourceAttribute. W moim szczególnym przypadku nie byłem zainteresowany przekazaniem parametrów do metody fabrycznej, ale można łatwo zastosować tę samą technikę, aby osiągnąć to, co chcesz.

Nie było to wcale takie trudne i wymagało tylko napisania czegoś w rodzaju trzech małych klas. Możesz przeczytać więcej o moim rozwiązaniu pod adresem: blackbox testing with nunit using a custom testcasesource.

PS. Aby użyć tej techniki, musisz użyć NUnit 2.5 (przynajmniej) Powodzenia.

Powiązane problemy