2011-11-25 13 views
5

Mam to konkretne wywołanie w moim kodzie i stwierdziłem, że konfiguracja musi być inna podczas uruchamiania pełnej aplikacji, kiedy testuję przy użyciu testu jednostki integracyjnej.Użyj dyrektywy #IF do wykrycia testu jednostkowego

Czy istnieje sposób sprawdzenia połączenia z testu urządzenia za pomocą dyrektywy #if?

#if TestMethod 
...do this config 
#else 
...do this config 
#endif 

Może w jakiś sposób wykryć atrybut w funkcji testu jednostkowego?

Odpowiedz

11

Nie, ponieważ kod istnieje w zbudowanym pliku binarnym lub nie. Decyzja jest podejmowana w całości przy użyciu , więc nic nie można zrobić w czasie wykonywania, aby ponownie wprowadzić "brakujący" kod. Musisz dynamicznie załadować jeden z dwóch różnych plików binarnych i uruchomić testy w ten sposób.

Czy użytkownik ma używać kompilacji warunkowej, zamiast decydować, która trasa ma zostać wykonana w czasie wykonywania?

+0

Szukał łatwego sposobu, a następnie komentowania i odkomentowania kodu. Nie chciał tracić więcej czasu na przekopywanie się przez mapę struktury. Początkowo test przebiegał poprawnie, a po uruchomieniu aplikacji wystąpił błąd w tej jednej linii. Miał nadzieję na szybkie i łatwe rozwiązanie, a następnie komentowanie kodu. Teraz, gdy widzę dyrektywy jako zdarzenie czasu kompilacji, ma sens, dlaczego nie zadziała. –

0

Nie chcesz obsługiwać kontekstu wywołującego z kodu; szczególnie jeśli próbujesz sprawdzić logikę w nim. Jeśli jednak chcesz wykonać jakąś funkcję z różnymi parametrami (na przykład), w zależności od tego, czy robisz to w kontekście aplikacji lub testu, możesz użyć jakiegoś bazowego typu lub interfejsu jako parametru lub oznaczyć metodę za pomocą atrybut i sprawdź atrybut za pomocą refleksji. Dyrektywy mają posłużyć do określenia, który kod należy skompilować, i powinieneś ich używać tylko wtedy, gdy masz pewność, że to właśnie zamierzasz.

Powiązane problemy