这都是关于权衡的。黄瓜风格的规范很棒,因为它是纯文本,非编码人员可以轻松编辑和阅读。
然而,它们作为规范也非常严格,因为它们基于特征和 Given-When-Then 强加了严格的格式。例如,在 specs2中,我们可以编写任何我们想要的文本,并且只注释那些意味着系统操作或验证的行。缺点是文本被注释并且pending
必须明确指定以指示尚未实现的内容。此外,注释只是对某些代码的引用,它们存在于某个地方,您当然可以使用通常的编程技术来获得可重用性。
顺便说一句,上面的链接是一个有趣的权衡示例:在这个文件中,第一个规范是“丑陋的”,但是有更多的编译时检查该When
步骤使用来自Given
步骤的信息或者我们没有步骤顺序Then -> When
。第二个规范更好,但也更容易出错。
然后是维护正则表达式的问题。如果编写功能的人和实现它们的人之间有严格的分离,那么即使没有实质性的改变,也很容易破坏实现。
最后,还有版本控制的问题。谁拥有该文件?我们如何确保代码与规范同步?谁在需要时重构规范?
到目前为止,还没有完美的解决方案。我自己的结论是,BDD 工件应该掌握在开发人员手中并由其他利益相关者验证,如果代码可读,则直接阅读代码或阅读 html/pdf 输出。如果 BDD 工件归开发人员所有,他们不妨使用自己的工具通过验证(尽可能使用编译器)和维护(使用自动重构)来简化工作。