0

我使用 TDD/ SSR已经有一段时间了。我正在尝试过渡到 BDD:context、becauseOf 和 A​​sserts。

我正在使用 Rhino Mocks 进行隔离,现在我正在努力解决语法问题。这是我到目前为止所得到的(注意:ContextSpecification 类源):

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 属性将返回的值?我现在在因为我的方法中做它,但我应该在我的 Context 方法中做它吗?

4

1 回答 1

0

这取决于哪些上下文会影响您的班级的行为,哪些是班级运作所必需的。

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

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

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

于 2010-09-28T06:43:32.863 回答