2011-12-14 11 views

Odpowiedz

8

Używam go w moim bieżącym projekcie.

Używam SpecFlow do testowania interfejsu użytkownika (klienta WWW) i niektórych testów importu.

Do testowania jednostkowego używam Machine.Specifications.

Myślę, że SpecFlow dobrze odpowiada temu zadaniu. Posiadam wsparcie eksperta ds. Wymagań, testera sprintu i czasami kierownika projektu w pisaniu specyfikacji, co oznacza, że ​​mogę skoncentrować się na implementowaniu funkcji, zamiast czytać ciężkie specyfikacje wymagań.

Technicznie używam CassiniWebDev do hostowania projektu klienta WWW i prostego Process.Start dla punktów końcowych NServiceBus dla testów, które używają pełnego koła. Używam Selenium do testów interfejsu użytkownika i FluentAutomation. Ustalenie wszystkiego zajęło kilka dni, ale zdecydowanie warto.

Generuję raporty SpecFlow, używam Pickles do renderowania Cech do sieci i robienia zrzutu ekranu z Selenium i opublikuję całą rzecz na stronie projektu, aby wszyscy interesariusze mogli zobaczyć, co się dzieje i jakie rzeczy wyglądają w tej chwili.

Polecam SpecFlow dla projektu BDD/CQRS.

+0

dziękuje Mikaelowi za dzielenie się, dziwna rzecz, nie mogłem znaleźć żadnego właściwego przykładu. większość z nich odnosi się do MSPec może ze względu na czas pojawienia się. To, co widziałem w jednym z przykładów, przedstawia głównie rozwlekłe porównanie podejścia Marka Nijhofa, pozostaje zwięzłe. Chciałbym zobaczyć trochę z SpecFlow – mobygeek

+0

Co z czekaniem na wiadomości do filtrowania przez system? Jak to robisz? – iwayneo

4

Użyłem Machine.Spec do testowania CQRS z BDD. Z mojego punktu widzenia zadziałało całkiem dobrze. Na przykład:

Establish context =() => 
     { 
      // set up your fakes & mocks here... 
     }; 

    Because of =() => 
     { 
      _bus.Send(_createNewCustomer); 
      _version++; 
     }; 

    It should_create_a_customer =() => 
     { 
      _repository.GetById(_id).Id.ShouldEqual(_id); 
     }; 

    It should_publish_a_customer_Created_event =() => 
     { 
      _subscriber.HandledEvents.Count.ShouldEqual(1); 
      _subscriber.HandledEvents.First().Value.ShouldBeOfType(typeof(CustomerCreatedEvent)); 
     }; 

    Cleanup Clear_Context =() => _subscriber.HandledEvents.Clear();