我刚刚发现了BDD的概念,我试图理解如何以正确的方式编写用户故事。假设我需要针对某些可能无法通过Given
完全规定的外部状态来测试我的应用程序,这样我可能会有多个Then
而不是:{/ p>
Given [State]
When [Some Action]
And [Some Other Action]
Then [Outcome A]
And [Outcome A']
Or [Outcome B]
And [Outcome B']
在BDD中这是一个合理的故事吗?就我而言,A
和B
在给定状态和行动的情况下都是合理的预期结果,并且它们是唯一可接受的结果。
答案 0 :(得分:1)
如果您的系统具有非确定性行为,那么这非常合适。
然而,计算机系统具有确定性行为,因此如果您正在开发软件(而不是使用BDD,例如人类交互系统),那么您可能希望更精确地指定它。
您总是可以为Givens中的上下文模拟或编写自己的存根。例如,在我们最初用于开发JBehave的俄罗斯方块游戏中,为了场景的目的,我用已知种子替换了真实游戏中使用的随机种子。然后我可以添加如下行:
鉴于我们目前的形状是“T” 而下一个形状是“S”< - 我可以知道,因为它是一个固定的种子
您可以执行与日期,第三方系统,现有生产系统等类似的操作。
因此,我希望您有两种情况:
鉴于[州] 和[导致A的国家]
当[某些行动]
和[其他一些行动]
然后[结果A]
并[结果A']
和B类似:
鉴于[州] 和[通往B的州]
当[某些行动]
和[其他一些行动]
然后[结果B]
和[结果B']
围绕系统运行的不同环境以及它们如何导致不同结果的对话是BDD的核心。这有助于说明系统的行为。
但是,如果您的系统实际上远远超出您的控制范围,您无法确定地使用它,并且如果您选择的工具支持使用“或”,那么自动化您的方式就可以了。不过,我仍然会在你的谈话中尽可能具体。 将一个上下文,这意味着您为该上下文而不是结果A编写了结果B;否则你可以让结果A成为你唯一的结果,然后说“完成工作”。
答案 1 :(得分:0)
如果可读,易懂且不会被误解,那就做你想做的事。