📜  BDD-以BDD方式进行TDD(1)

📅  最后修改于: 2023-12-03 15:13:38.508000             🧑  作者: Mango

BDD-以BDD方式进行TDD

什么是BDD?

BDD(Behavior-driven development)即行为驱动开发,它是一种通过描述系统行为来进行系统开发、测试和验收的软件开发方法。BDD的核心思想是将需求转换为自然语言描述的场景,以此为基础开发和测试,同时也保证了测试的可读性和可维护性。

BDD和TDD的关系

TDD(Test-driven development)即测试驱动开发,是一种通过先编写测试用例,然后编写代码来满足测试用例的需求的软件开发方法。BDD和TDD的本质是一样的,都是先进行测试,然后编写代码来满足测试的需求。但是BDD更加注重的是业务需求及需求的复杂性,更加贴近用户需求,更加注重测试的可读性和可维护性。

如何以BDD方式进行TDD?
  1. 定义需求

BDD的第一步是定义需求。我们需要以自然语言来描述需求,例如:“当A用户输入用户名和密码并点击登录时,系统应该验证用户的身份,如果认证成功,则进入系统主页,否则提示用户用户名或密码错误。”

  1. 根据需求编写场景

在根据需求编写场景时,我们需要考虑到场景的不同情况,及场景的处理方式。场景需要包括given、when和then三个步骤,分别描述场景的前置条件、操作以及预期的结果,例如:

Scenario: A user enters the correct username and password
Given a user is on the login page
When the user enters 'username' and 'password' in the correct format
And the user clicks the login button
Then the user is redirected to the homepage
And the user's name is displayed on the page
  1. 编写测试用例

在BDD中,场景就是测试用例。因此,我们可根据场景编写测试用例,例如使用Cucumber、JBehave或Specflow等框架编写测试用例。测试用例应该简单、易懂,易于维护。

  1. 编写代码

测试用例编写完毕后,我们需要编写代码来满足测试用例的需求。在BDD中,我们应该尽可能地将测试用例直接转换成代码,以实现测试用例的需求。

public void test_login_success(){
   LoginPage loginPage = new LoginPage();
   loginPage.login("username", "password");
   
   Assert.assertEquals("HomePage", driver.getTitle());
   Assert.assertTrue(driver.findElement(By.cssSelector(".username")).isDisplayed());
}
  1. 执行测试用例

测试用例编写完毕后,我们需要执行测试用例,并根据测试用例的结果来修复代码中的bug。

总结

以BDD方式进行TDD,可以更加贴近用户需求,增强测试用例的可读性和可维护性。BDD和TDD虽然本质相同,但是BDD更加注重的是业务需求及需求的复杂性,更加注重测试的可读性和可维护性,从而使得开发和测试更加协同。