将BDD用作前端和后端作为一个项目的测试优先开发方法的流程是什么?

问题描述 投票:0回答:1

当前,我正在使用BDD with Cucumber作为test-first 开发方法的项目。我正在努力理解UI与后端代码的集成。

根据我的理解BDD->写入失败的情况(功能文件)->写入步骤定义(步骤Def文件)->应用程序代码(Java类)我已经使用测试优先方法(Java cLass)实现了后端。接下来,我需要集成我的UI部分。我是否需要将我的前端动态Web项目创建为一个单独的项目,然后如何遵循测试优先的方式。互联网上的所有内容都只是在告诉Cucumber和Selenium作为自动化框架。在开发完整的端到端(即使是很小的应用程序)时,我找不到很好的资源,但是同时使用了前端和后端作为测试优先方法。我不想了解测试,我正在尝试将BDD作为测试优先开发方法应用

cucumber bdd cucumber-jvm jbehave test-first
1个回答
0
投票

首先,在锁定Web应用程序时,您的最初重点应该放在应用程序的功能及其重要性上。因此,其实现方式完全不相关。

使用Cucumber作为使用BDD进行开发的工具,您仅需编写以业务需求为指导的场景,为什么他们想要的东西是如此重要,以至于他们希望您尽快进行开发。

[通过用户界面,用户将要做某事(WHAT),而那件事将很重要(WHY)。他们正在做的事情将需要与UI进行交互(此时,他们如何交互是完全不相关的。这种交互在WHEN场景中捕获。

为了使他们进行这种交互,某些事情必须已经发生。这些都是由GIVENS场景捕获的。用户与系统交互后,需要在UI中进行某些更改。您可以在THENS场景中进行检查。

一旦有了您的方案,就可以定义并开始实施步骤定义。通常,我使每个步骤定义都成为对辅助方法的单个调用,因此这些步骤仅做一件事,那就是将方案中的一行转换为您的编程语言调用。

现在您可以用编程语言定义一个方法,只有这样您才应该开始考虑如何使所有这些工作。

以您理解的非常简单的示例开始这项工作。我将选择注册。

Scenario: Register
  Given I am a new user
  When I register
  Then I should be registered

现在我们可以进行步骤定义,(我将使用ruby,您将不得不翻译)

Given 'I am a new user' do
  @i = create_new_user
end

When 'I register' do
  register(user: @i)
end

Then 'I should be registered' do
  check_registration(user: @i)
end

现在我们制作辅助方法

def create_new_user
  # here you will create a new user. The user will know their email and password
end

def register(user: )
  # here you can use a tool, perhaps selenium, to goto the registration page 
  # and fill in the registration from. You can use the user to get the email,
  # password and any other registration details
end 

def check_registration(user: )
  # here you will look at where you are in the UI and look at the page to
  # confirm the user is registered
end

就这样。您只需为发现的每个新行为重复该模式。

一些其他技巧

大多数纪要不需要通过用户界面所有与用户界面交互的时间所有THENS应该与用户界面进行交互

您对后端所做的一切与如何继续使用BDD开发新行为无关。 BDD就是要找出原因和原因。仅当您开始考虑如何实现指定的行为时,后端才有意义。

如果您以较小的增量步骤工作,则可以使用以前的行为来建立新的行为。因此,一旦我们可以注册,就可以开始考虑登录

Scenario: Sign in
  Given I am registered
  When I sign in
  Then I should be signed in

并且我们遵循与上述完全相同的模式。

注意,因为纪要不必通过用户界面,所以我们可以做类似的事情

Given 'I am registered' do
  @i = create_registered_user
end 

def create_registered_user
  user = create_new_user
  save_user_to_db(user)
  return user
end
© www.soinside.com 2019 - 2024. All rights reserved.