我们正在考虑在我们的项目中使用Cucumber进行验收测试。
当我们在Cucumber feature
中编写scenario
时,我们会编写一系列Given
、When
和Then
语句。
当我们使用cucumber-jvm项目时,Given
、When
和Then
语句与(JUnit)类中的Java方法相关。
我想知道在项目结构中,与Given
/ When
/ Then
相关的代码最好的组织是什么。我主要关心的是一个大项目上的黄瓜测试的维护,其中场景的数量非常重要,特别是关于在功能之间共享的项。
我至少可以看到两种主要的方法:
foo/bar/baz.feature
cucumber文件,我会找到相关的foo.bar.Baz
JUnit类,其中包含足够的@Given
、@When
和@Then
注释,并将cucumber @Given
、@When
和@Then
方法添加到“主题”类和包中。例如,如果在我的黄瓜场景中有一条语句Given user "foo" is logged
,那么带@Given("^user \"([^\"]*)\" is logged$")
注释的方法将位于foo.user.User
类方法中,但是稍后在同一黄瓜场景中使用的@When
方法可能位于不同的Java类和包中(假设是Java类和包对我来说,第一种方法似乎很好,因为我可以轻松地处理我的cucumber特性和Java代码之间的关系。但缺点是我可能有很多冗余或代码重复。此外,可能很难找到可能的现有@Given
方法,以避免重新创建它(集成开发环境可以提供帮助,但这里我们使用的是Eclipse,而它似乎没有给出现有Given
语句的列表?)。
当你在几个黄瓜特性之间共享Given
条件时,另一种方法本质上看起来更好,因此我想避免代码重复。这里的缺点是很难在IDE Java方法和Given
cucumber语句之间建立联系(也许,同样,IDE可以提供帮助?)。
我对cucumber非常陌生,所以也许我的问题不是一个好问题,随着时间的推移和经验的积累,其结构将不言而喻,但我希望得到关于其用法的良好反馈……
谢谢。
发布于 2014-03-06 13:42:19
我建议根据代码引用的对象对代码进行分组,类似于您在问题中提出的选项#2。原因是:
在您的产品代码中想象这样一件事-- SendEmail()
函数不会在一个名为NewEmailScreenCommands
的类中,对吗?它应该是在EmailActions
或类似的语言中。
同样的道理也适用于这里;根据代码做什么来构造代码,而不是根据谁在使用它。
user
实体的所有代码的位置,因此更容易重用它。在我们的项目中,我们使用这种方法(即BlogPostStepDefinitions
类),如果类太大,则进一步将代码分离为步骤类型(即BlogPostGivenStepDefinitions
)。
发布于 2012-10-18 10:09:37
我们还开始使用Cucumber-JVM进行验收测试,在组织代码方面也遇到了类似的问题。我们为每个特征选择了1步定义类。目前这是很好的,因为我们正在测试的功能并不是非常复杂和完全独立的,我们的功能之间几乎没有重叠。
我认为您提到的第二种方法会更好,但将几个不同的步骤定义类绑定到一个场景中通常是具有挑战性的。我认为,一旦你开始添加更多的功能并像往常一样重构,最好的项目结构将变得更加清晰。
同时,这里有一个cucumber的Eclipse插件,
https://github.com/matthewpietal/Eclipse-Plugin-for-Cucumber
在编写特性时,它具有语法突出显示以及现有可用步骤的列表。
发布于 2015-09-10 09:04:49
在我目前参与的项目中,我们问了自己同样的问题。
在摆弄了一些可能性之后,我们选择的是您公开的两种解决方案的混合。
的特定步骤
这是同时具有因式分解的代码分组,这是很容易识别的,它的任何位置,去向和诸如此类的东西。然而,它允许不用过于具体的代码来扰乱这些公共类。
所有这些类之间的连接都是由spring处理的(使用cucumber spring,一旦您掌握了它的诀窍,它就会做得很好)。
https://stackoverflow.com/questions/12931281
复制相似问题