2017-02-09 26 views
8

Podejście do nazewnictwa BDD działa doskonale, gdy istnieje jedna metoda w klasie, którą testujesz. Załóżmy, że mamy klasę Connector, która ma metodę Connect:Nazewnictwo BDD dla kilku metod

Should_change_status_to_Connected_if_Disconnected 

Piękna, prawda? Ale czuję się zdezorientowany, gdy muszę wymieniać testy, gdy istnieje kilka metod w klasie (załóżmy, że dodaliśmy metodę Disconnect do naszej klasy).

Widzę dwa możliwe rozwiązania. Pierwszą z nich jest dodanie prefiksu z nazwą metody jak:

Should_change_status_to_Connected_if_Disconnected_when_Connect_was_called 

Innym podejściem jest wprowadzenie zagnieżdżonych klas testowych dla każdej metody jesteś testowania.

public class ConnectorTests 
{ 
    public class ConnectTests 
    { 
    public void Should_change_status_to_Connected_if_Disconnected() 
    { 
     ... 
    } 
    } 

    public class DisconnectTests 
    { 
    public void Should_change_status_to_Disconnected_if_Connected() 
    { 
     ... 
    } 
    } 
} 

Szczerze mówiąc, oba te podejścia są nieco odczuwalne (może być tylko dlatego, że nie jestem do tego przyzwyczajony). Jaka jest zalecana droga?

+0

Czy możesz dodać więcej kontekstu do swojego pytania. Jaka jest różnica między methodA i methodB. Oboje coś robią? –

+0

@SergeyBerezovskiy, naprawdę miałem na myśli ogólny przypadek, gdy klasa zawiera kilka metod. – SiberianGuy

+1

Przykro mi, ale nie jest jasne, jaki masz problem. Metoda wprowadza pewne zachowanie. Jeśli metoda A jest dla * somethingA *, a metodaB dla * somethingB * to twój problem nie jest jasny. Jeśli zarówno dla * somethingC *, to jaka jest różnica między * methodA * i * methodB *? –

Odpowiedz

0

Ponieważ przypadki testowe są całkowicie niezależne od siebie, musisz użyć klasy statycznej, aby zainicjować te wartości, połączenia itp., Które później wykorzystasz do testu. Jeśli chcesz korzystać z indywidualnych wartości i inicjatorów, musisz zadeklarować je na swoich zajęciach indywidualnie. Używam do tego schematu nunit.

A tak przy okazji, jesteś w C#, stosują konwencję nazw .NET programistów ...

1

W moim przypadku, po pierwsze, staram się oddzielnych klasach w zależności od warunków przed i po, więc mogę grupę niektóre zachowania i trzymaj razem powiązane rzeczy. Na przykład W twoim przypadku jednym warunkiem może być "Rozłączony", więc możesz przygotować "odłączone środowisko" przy użyciu atrybutów takich jak ClassInitialize, TestInitialize, TestCleanup, ClassCleanup, itp. (here some examples in MSDN)

Proszę, jako zalecili inni deweloperzy, nie zapomnij o naming conventions.

Mam nadzieję, że ta pomoc, pozdrowienia.