BDD:何时/何处设置存根?

时间:2010-09-27 17:12:22

标签: c# syntax rhino-mocks bdd context-specification

我一直在使用TDD / SSR一段时间。我正在尝试过渡到BDD:context,因为和Asserts。

我正在使用Rhino Mocks进行隔离,现在我正在努力学习语法。这是我到目前为止所得到的(注:ContextSpecification class source):

public static class DocumentIdAdapterTests {
    public class DocumentIdAdapterContext : ContextSpecification {
        protected IDocumentIdAdapter _documentIdAdapter;
        protected ISettings _settingsMock;
        protected override void Context() {
            _settingsMock = MockRepository.GenerateMock<ISettings>();
            _documentIdAdapter = new DocumentIdAdapter(_settingsMock);
        }
    }

    [TestClass]
    public class when_single_document_url_is_created : DocumentIdAdapterContext {
        protected override void BecauseOf() {
            _settingsMock.Stub(x => x.DocumentServiceBaseUrl).Return("fooOutput");
            _documentIdAdapter.GetDocumentServiceSingleDocumentUrl("fooInput");
        }

        [TestMethod]
        public void the_settings_should_provide_the_document_service_base_url() {
            _settingsMock.AssertWasCalled(x => { var ignored = x.DocumentServiceBaseUrl; });
        }
    }
}

我应该在哪里设置我的存根?例如,我应该在哪里存根DocumentServiceBaseUrl属性将返回的值?我现在正在使用我的SinceOf方法,但是我应该在Context方法中做到这一点吗?

1 个答案:

答案 0 :(得分:0)

这取决于哪些情境会影响你班级的行为,而这只是你班级运作所必需的。

如果您总是从特定的上下文开始(例如,您的文档服务始终位于特定的URL),那么您可以在构造函数或设置方法中进行设置。

如果您的上下文会影响您的行为(您称之为OU),那么每个上下文都需要一个新的场景。这通常是驱动场景的因素 - 产生不同结果的上下文组合(断言)。

一个好的BDD技巧是寻找不同的上下文。想一想,“我的代码是否应该始终如此?是否存在产生不同结果的上下文?”这为您提供了很好的对话启动器,可以发现您不了解代码的任何内容,并允许您为每个新的行为方面提供示例(单元测试)。