首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >黄瓜工程中使用另一类方法的体系结构问题

黄瓜工程中使用另一类方法的体系结构问题
EN

Stack Overflow用户
提问于 2019-11-19 23:45:21
回答 2查看 557关注 0票数 0

我最近加入了使用Cucumber和Selenium的自动化测试Java项目。它用于测试web应用程序。项目结构分为三个层次:

  • 特性文件--包含黄瓜测试场景和步骤
  • 胶水文件--绑定黄瓜步骤和调用Java方法
  • 页面文件--其中包含引用网页元素和访问这些元素的方法的字段。

每个glue文件都有带有@Before标记和@additional标记的方法,以便在每个测试场景之前在相应的特性文件中执行该方法。适当的特性文件还使用@additional标记来知道应该调用哪个@Before方法。在每个带有@Before标记的方法中都有一串行,它们初始化一些Page文件对象,例如:

黄瓜档案:

代码语言:javascript
复制
@DesignPage
Scenario: some example scenario
Given HI im cucumber step method

胶水文件:

代码语言:javascript
复制
@Before @DesignPage
public someBeforeMethod(){
...
designPage = new DesignPage();
managmentPage = new ManagmentPage();
...

另外,glue文件有黄瓜步骤的方法定义,这些方法从页面文件中调用一些方法,例如:

代码语言:javascript
复制
@Given("HI im cucumber step method")
public void HiImCucumberMethod(){
designPage.executeSomeDesignPageMethod();
} 

到现在为止一切都很好。

现在让我们说我有另一个(@MainPage)特性文件,但是我想从(DesignPage)特性执行完全相同的方法:

代码语言:javascript
复制
@MainPage
Scenario: some example scenario2
Given HI im cucumber step method

黄瓜从这里看到,HI im cucumber step method已经在DesignPage胶文件中声明了,所以我想重用这个方法。不幸的是,我将提高NullPointerException -原因是明确的。该方法中使用的designPage对象从未初始化过,因为我从未从DesignPage胶文件中执行@Before方法。原因是,在这种情况下,我只执行来自不同胶水文件的@Before方法-- MainPage胶水文件。

这个架构让我有点恼火,因为唯一的解决方案是将HI im cucumber step method方法从DesignPage胶水文件复制到MainPage胶水文件,在MainPage @Before类中初始化设计页面对象,另外我还要重命名HI im cucumber step method,因为Cucumber现在看到了两个引用相同的方法,它不知道应该使用哪种方法。

我在这方面花了一些时间,我不知道如何改变体系结构,以便能够从另一个特性中重用一个功能方法。任何建议都将受到欢迎。

EN

回答 2

Stack Overflow用户

发布于 2019-11-20 06:46:53

我认为:Given HI im cucumber step method的当前步骤定义只初始化页面对象的实例,在每个测试场景之前执行该步骤是必需的。如果这是真的,那么也许您应该考虑将其移到Before钩子中。根据文档,它实际上是为了在场景之前进行一些技术设置而设计的。

在预挂钩中发生的任何事情对于只阅读这些特性的人来说都是不可见的。您应该考虑使用背景作为一个更明确的选择,特别是如果设置应该是可读的非技术人员。只对低级逻辑使用预挂钩,例如启动浏览器或从数据库中删除数据。

了解更多信息:https://cucumber.io/docs/cucumber/api/#hooks

票数 0
EN

Stack Overflow用户

发布于 2019-11-20 07:20:53

尝试在方法定义中初始化对象,而不是在“前”方法中初始化对象。就像这样

代码语言:javascript
复制
Class GlueFile
{
    DesignPage designPage;
    ManagmentPage managmentPage;

 @Before @DesignPage
 public someBeforeMethod(){
 ...
 }
 @Given("HI im cucumber step method")
 public void HiImCucumberMethod(){
 designPage = new DesignPage();
 managmentPage = new ManagmentPage();
 designPage.executeSomeDesignPageMethod();
 } 

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58944562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档