NUnit Data driven tests driven by meta data

0

Cześć,

Piszę testy jednostkowe to pewnej mojej biblioteki z wykrzystaniem NUnint 2.5.9 (testy dla .net).
W dll-ce mam spory zestaw klas (których systematycznie przybywa), które zawsze mają spełniać pewien zestaw założeń.
Oczywiście mógłbym to zrobić tak:

[TestCase("ClassName1")]
[TestCase("ClassName2")]
[TestCase("ClassName3")]
[TestCase("ClassName4")]
[TestCase("ClassName5")]
....
void testCaseName(string className)
{
      ....
}

Ale jest to głupie rozwiązanie i wymaga ciągłego uzupełniania listy TestCase, a ta lista jest dość długa (finalnie będzie powyżej 100).
Jestem w stanie automatycznie pobrać pełną listę klas spełniającą założenia korzystając z meta danych:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using NUnit.Framework;

....
private static List<Type> findAllClassesToTest()
{
    Assembly dll = typeof(NameOfSomClass).Assembly;

    List<Type> exported = dll.GetExportedTypes().ToList().FindAll(
        delegate(Type export)
        {
            return export.IsClass 
                    && !export.IsAbstract 
                    && export.IsSubclassOf(typeof(SomeBaseClass)) 
                    && export.GetConstructor(Type.EmptyTypes) != null;
         });

    return exported;
}

Ale teraz jak tą listę wykorzystać tak by każdy element tej listy stanowił jeden TestCase?
Nie mogę po prostu iterować po wszystkich w jednym teście, bo efekt będzie taki, że jeden fail zatrzyma dalszą analizę dla pozostałych klas, a ja chcę, by zawsze przetestowane zostały wszystkie klasy i dla każdej z nich został pokazany wynik testu (tak jak w przypadku wypisanej explicite pełnej listy klas z użyciem [TestCase("NazwaKlasy")] - jak w pierwszym przykładzie kodu).
Jakieś sugestie?

0

Nie wiem jak atrybut TestCase jest obsługiwany przez NUnit, ale można by zgłebić temat czy nie można wydziedziczyć po TestCase, aby NUnit go chwycił i "oszykać" go żeby łyknął więcej typów.
Ewentualnie z metody testCaseName wywołać testy dla każdego typu wyliczonego dynamicznie, tylko chyba z rozdziałem wyników będzie gorzej.
Może w domu coś więcej wymyśle jak będę mial VS i reflectora pod ręką.

0

Niestety atrybut TestCase łyka tylko stałe znane w czasie kompilacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1