[C#, nunit] jak rozpoznać czy właśnie wykonuje się test?

0

Problem jest następujący:

w bibliotece są testy jednostkowe NUnit, które działają na bazie danych. Moim zamysłem jest zrobienie funkcji, która zwraca ConnectionString - i tu ważna informacja -

  • normalny dla "normalnego działania" (to znaczy przez serwis WCF)
  • inny (z góry określony) dla testu jednostkowego NUnit (wskazujący na testową bazę danych).

Problem w tym, że nie mam za bardzo pomysłu jak rozpoznać, czy to co aktualnie leci to test, czy wykonanie funkcji z serwisu.

Byłbym wdzięczny za wszelką pomoc.

0

Przeladowana metoda nie wchodzi w gre? Jedna wersja wywolywana normalnie, druga z poziomu testu.

//edit
A moze przez Reflection da sie sprawdzic czy metoda/klasa wywolujaca (ktoras z linii wywolan) ma ustawiony atrybut Test/TestFixture ?

0

Przeładowana metoda odpada - by trzeba zmieniać co nieco, poza tym istnieje niebezpieczeństwo, że ktoś użyje nie tej metody co trzeba.

Drugie rozwiązanie chodziło mi po głowie - ale jakoś nie mogę się z nim pogodzić :-/ - przeczesać cały stos + sprawdzić atrybut blehh

0

No wiem, ze srednio ladne rozwiazanie, ale ostatecznie caly stos wywolan nie przekroczy raczej 10 elementow, wiec nie jest to szczegolnie duze obciazenie.

Co do pierwszego zastrzezenia (oprocz zmiany) to mozna dodac atrybut w stylu Obsolete z komunikatem - wtedy bedziesz ostrzegany, ze uzyles nie tej metody co trzeba.

3 pomysl oparty na gdybaniu: moglbys sprawdzic czy assembly nunit jest zaladowane i na tej podstawie to rozrozniac. Gdybanie bo zakladam, ze jest ladowane tylko przy testach.

0

istnieje niebezpieczeństwo, że ktoś użyje nie tej metody co trzeba

if(!nunit) throw new NotSupportedException("Metoda tylko do testów !");

:)

0

johny_bravo .. zdaje się, że nie ma innego sposobu (lepszego ) :|

Dla potomnych:

public static bool IsRunningUnderNUnit()
{
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace();
            for(int i=0;i<trace.FrameCount;i++)
            {
                  System.Reflection.MethodBase methodBase = trace.GetFrame(i).GetMethod();
                  if(methodBase.IsDefined(typeof(NUnit.Framework.TestAttribute), true))
                  {
                        return true;
                  }
            }
            return false;
  }

Dzieki za pomysł.

0

Mozesz w ramach optymalizacji trzymac wynik w statycznej skladowej i za drugim razem odpowiadac od razu (cos a la singleton). Raz uruchomione sprawdzanie w calej domenie programu da taki sam wynik.

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