有没有人使用SpecFlow / StoryQ使用CQRS完成BDD

时间:2011-12-14 13:37:04

标签: bdd cqrs specflow

是否有任何人有使用现成框架作为BDD中CQRS规范的经验。

我喜欢Mark Nijhof的方法,但我已经将SpecFlow用于其他项目。任何人都可以提供一些启示,如果可能的话还有一个例子吗?

2 个答案:

答案 0 :(得分:8)

我在我当前的项目中使用它。

我正在使用SpecFlow进行UI测试(Web客户端)和一些导入测试。

对于单元测试,我使用的是Machine.Specifications。

我认为SpecFlow很适合这项任务。我得到了需求专家,sprint测试人员以及有时编写规范的项目经理的支持,这意味着我可以专注于实现功能而不是阅读繁重的需求规范。

从技术上讲,我使用CassiniWebDev来托管Web客户端项目,并使用简单的Process.Start为NServiceBus端点进行使用整圈的测试。我使用Selenium进行Web UI测试,然后使用FluentAutomation。花了几天的时间才把它全部搞定,但这绝对值得。

我生成SpecFlow报告,使用Pickles将功能渲染到Web并使用Selenium拍摄屏幕截图并在项目网站上发布整个内容,以便所有利益相关者可以看到正在发生的事情以及目前的情况。 / p>

我建议为BDD / CQRS项目使用SpecFlow。

答案 1 :(得分:4)

我使用Machine.Spec来测试带有BDD的CQRS。从我的观点来看,它运作得很好。例如:

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