Кто-нибудь делал BDD с CQRS, используя SpecFlow / StoryQ - PullRequest
5 голосов
/ 14 декабря 2011

Есть ли у кого-нибудь опыт использования готовых фреймворков в качестве specflow с CQRS в BDD.

Мне понравился подход Марка Нийхофа, однако я уже использовал SpecFlow для других проектов.Может ли кто-нибудь предложить немного просветления с примером, если это возможно?

Ответы [ 2 ]

8 голосов
/ 14 декабря 2011

Я использую его в моем текущем проекте.

Я использую SpecFlow для тестирования пользовательского интерфейса (веб-клиент) и некоторых импортных тестов.

Для модульного тестирования я использую Machine.Specifications.

Я думаю, что SpecFlow подходитзадача хорошо.У меня есть поддержка со стороны эксперта по требованиям, тестировщика спринта и иногда менеджера проекта при написании спецификаций, что означает, что я могу сосредоточиться на реализации функций, а не на чтении сложных спецификаций требований.

Технически я использую CassiniWebDev для размещения проекта веб-клиента и простой Process.Start для конечных точек NServiceBus для тестов, использующих полный цикл.Я использую Selenium для тестирования веб-интерфейса и FluentAutomation.Это заняло пару дней, но оно того стоит.

Я создаю отчеты SpecFlow, использую Pickles для рендеринга функций в Интернет, делаю снимки экрана с Selenium и публикую все это на веб-сайте проекта, чтобы все заинтересованные стороны могли видеть, что происходит и как это выглядит намомент.

Я бы порекомендовал SpecFlow для проекта BDD / CQRS.

4 голосов
/ 14 декабря 2011

Я использовал Machine.Spec для тестирования CQRS с BDD.С моей точки зрения это работало довольно хорошо.Например:

    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();
...