为 JBehave 测试设置夹具数据的最佳方式

Best way to setup fixture data for JBehave tests

假设我们有多个这样的测试:

Scenario:  trader is not alerted below threshold

Given a stock of symbol STK1 and a threshold of 10.0
When the stock is traded at 5.0
Then the alert status should be OFF

但不同之处在于,所有 "Given" 设置都必须在任何睾丸 运行 之前完成。执行此操作的最佳方法是什么?

检查 http://jbehave.org/reference/stable/story-syntax.html 故事文件中的 Lifecycle: 个步骤。但请注意,每个场景都会执行 before/after。

还有@BeforeStory@AfterStory注解,使用起来很明显,但你可能需要查看文档:http://jbehave.org/reference/stable/annotations.html.

但是,您可能觉得在故事文件中包含 所有内容 会更好...据我所知,您不能在故事文件中定义步骤,在执行故事之前 运行s。

我之前也运行进入过这个特性的'lack',但我认为它没有实现的原因是它不适合BDD方法,场景应该是独立可执行的并且可以理解。这些步骤通常与某种环境准备相关(全局适用于所有场景),这对人类 readers(利益相关者)并不重要,因此不应成为 'User story description' 的一部分.story 文件应该是。

如果没有重大性能问题,我发现 - 从可读性的角度来看 - 最好在每个场景之前 运行 这些 setup/teardown 内容。如果您使用 Lifecycle: 步骤,您将不会以重复结束,并且任何人 reader 只需阅读故事文件就可以清楚应该执行哪些步骤来执行测试。但这只是我的意见。

所以我认为您有以下选择:

  1. 运行 你的步骤 before/after 每个场景使用 LifeCycle:
  2. 使用 @BeforeStory@AfterStory 注释
  3. 用你的 setup/teardown 步骤定义一个虚拟场景作为你的故事文件的 first/last 场景并命名它以便每个人都清楚它只是一个 'technical' 场景.默认情况下场景的顺序是固定的,所以这可能会成功。 (骇人听闻...)
  4. Lifecycle: 部分编写步骤,并破解这些步骤的实现,以便它们在故事中执行一次(甚至更 hackish)