2012-04-05 28 views
7

Mam klasy testowej w następujący sposób:Nie wszystkie badania są prowadzone w parametryzowane NUnit TestFixture zawierających tablic

[TestFixture("someurl1", new[] { "param1", "param2" }, 15)] 
[TestFixture("someurl2", new[] { "param3" }, 15)] 
public class my_test 
{ 
    public my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
    } 
} 

Uruchamiając ten test w ReSharper 6.1 i NUnit 2.5.10, test nie jest prowadzony dwukrotnie, jako spodziewane, działa tylko raz. W wynikach testów widzę wymienione

my_test("someurl1", System.String[], 15) 

To sprawia, że ​​myślę, że oba urządzenia są traktowane jako takie same, i że NUnit nie jest rozróżnianie między tablicami ciąg w obu testach.

Jako obejście dodałem parametr dummy w konstruktorze. Jeśli ustawię tę wartość na inną wartość dla każdego urządzenia, wszystkie testy zostaną uruchomione.

Czy nie jest możliwe posiadanie TestFixtures z tablicami zawierającymi różne wartości? Właśnie zaktualizowałem program ReSharper 5, więc zastanawiam się, czy jest to powiązane. Czytałem o niektórych problemach z parametryzowanymi testami w 6.x.

+0

Czy działa w NUnit runner? – Scroog1

+0

Ponadto, dziękuję za wskazanie, że można sparametryzować urządzenia testowe, ponieważ nie wiedziałem, że to możliwe. – Scroog1

+1

Po prostu wypróbowany w NUnit Runner i pomyślnie uruchamia wszystkie testy. Myślę, że może to być związane z aktualizacją ReSharper. –

Odpowiedz

0

Myślę, że jest to związane z tworzeniem tablicy w konstruktorze TestFixture, czytałem gdzieś, że nie możesz tego zrobić.

0

Czy próbowałeś stworzyć indywidualne testy pod nim jako ogólny TestFixture ??? Coś jak

[TestFixture] 
public class my_test 
{ 
    private bool my_test(string url, string[] fields, int someVal) 
    { 
     // test setup 
     return DidTestCompleteOk; 
    } 

    [Test] 
    public void TestURL1() 
    { 
     Assert.IsTrue(my_test("someurl1", new[] { "param1", "param2" }, 15)); 
    } 

    [Test] 
    public void TestURL2() 
    { 
     Assert.IsTrue(my_test("someurl2", new[] { "param3" }, 15)); 
    } 
} 
4
[TestFixture("someurl1", "param1|param2", 15)] 
[TestFixture("someurl2", "param3", 15)] 
public class my_test 
{ 
    private string[] _fields; 

    public my_test(string url, string fieldList, int someVal) 
    { 
     _fields = fieldList.Split('|'); 
     // test setup 
    } 

    [Test] 
    public void listFields() 
    { 
     foreach (var field in _fields) 
     { 
      Console.WriteLine(field); 
     } 
    } 
} 
0

Okazuje się, jest to absolutny komunikat o błędzie, jeśli coś pójdzie nie tak w konstruktorze sparametryzowanej testowego obrębie urządzenia użytkownika. Nie otrzymujesz rzeczywistych informacji o wyjątkach, które są zwracane, np. Gdy błędy nie powiodą się w innym kodzie.

Prawdopodobnie powinieneś przenieść swój kod instalacyjny do [SetUp] lub [TestFixtureSetUp] lub mieć pewność, że twój konstruktor działa bezbłędnie. Ale naprawdę powinieneś robić pierwszą sugestię, a jedynie zapisać parametry testowego urządzenia w konstruktorze i zrobić coś z nimi w innej metodzie.