2017-07-29 156 views
2

我想开始一个宠物项目,以便从头开始创建Web应用程序,并且我想要使用BDD和TDD。 我在“面向对象的软件增长:通过测试引导”中读到,我们应该从系统的最薄片开始,它允许我们有一个整个应用程序的步行骨架,所以我们可以有一个快速反馈,并开始想知道生产/部署程序。如何使用BDD从头开始创建Web应用程序?

在BDD中写入验收测试之后,我会转向更细粒度的测试,例如单元测试。

想象的Web应用程序是要找到谁更接近你的超级英雄,我会写一个BDD场景如:

When I insert my information 
Then the system should tell that the superhero I'm more similar to is "Batman" 

我无视目的的认证,这样我们可以专注于系统的主要功能。这种情况假设后面有一个工作基础架构,以便上面的场景可以自动复制,端到端。

假设我想在不同的层(Web服务器,应用程序服务器和数据库)中布置Web应用程序,我该如何实现此测试? 假设我想使用Selenium WebDriver模拟用户,必须先模拟哪些图层以及首先要测试哪个图层? 我也考虑过从测试API开始,但这不会是一个端到端的测试,但我们只会部分测试应用程序。

回答

1

黄瓜是一个很好的BDD框架。用户界面/硒测试可能有点不灵活,所以我建议他们少一些(请参阅测试金字塔)。 就我个人而言,我认为我会按照您对初学者的建议在API级别工作,然后您已将UI与应用程序分离。

在API级别编写一些应用程序的黄瓜集成测试(BDD),描述高级功能。我不会嘲笑这个级别,因为你希望看到整个应用程序在这一点上工作。

然后,当你实现这些,使用TDD,在这里你会想要嘲笑外部像文件IO /数据库。一旦所有的TDD单元测试完成,整体功能就会通过。继续,直到完成所有功能。

继续这样做,然后在API级别有一套可靠的单元测试和一套可靠的集成(功能)测试。

一旦完成(或平行得到一个垂直切片),使用'快乐的一天'情景硒测试开始用户界面,所有真正需要在这里测试的是用户界面代码,并正确连接到应用程序,作为主要的应用程序已经过测试。

只是我的看法 - 希望它有帮助。

+0

你会使用与API测试相同的场景吗? – acejazz

+0

有效的是。该API使用集成和单元测试进行测试。其他UI测试也将接触到的API,如果在制度层面做 – MikeJ

0

我会为此使用Cucumber(但我非常有偏见),我会先从应用程序的核心部分编写一些场景开始。

一些重要的规则来写你的场景时遵循

  1. 使用您的域语言
  2. 只谈你正在做什么和为什么它的重要
  3. 不要谈论你如何做的事情。

因此,你的超级英雄网站,你可以开始考虑你需要做的事情开始。

通常当你发现一个资源(超级英雄),你将有你可以探索一些基本的CRUD操作,所以

  • 创造的超级英雄
  • 编辑超级英雄
  • 删除超级英雄
  • COMPARING一个超级英雄**这是你的关键出发点**

让我们开始工作比较一个超级英雄场景

Given there are superheroes Batman and Superman And I am like Batman When I find my superhero Then I should see I am like Batman

现在让我们开始实施这一方案。这里最重要的一点是不要将所有代码放在步骤定义中。相反,使每个步骤定义调用辅助方法。

注:以下所有的代码将红宝石

Given 'there are superheroes Batman and Superman' do create_superhero batman create_superhero superman end

现在我们可以进入BDD红/绿测试周期。

因此,我们将开始得到这样的错误No method found create_superheroundefined constant batman。我们可以在步骤定义中使用辅助模块来解决这些问题。

module CreateSuperHeroStepHelper 
    def create_superhero(attrs={}) 
    Superhero.create(attrs) 
    end 

    def batman 
    { 
     ... 
    } 
    end 

    ... 

end 

而从这段代码中,我们可以开始处理我们应用程序的域对象。超级英雄。

为了得到这一步的工作,你必须与你的潜在的Web框架交互。一旦你有它的工作,以最基本的形式,你可以进入下一步。

沿途你将有各种各样的选择,你下一步怎么办的方法。如果你坚持在这个核心场景中工作,你必须聪明的实现你的实现。如果您决定处理看起来像先决条件的情景,例如用户帐号,创建超级英雄,输入你的超级英雄特征,添加超级英雄特征。然后,你应该结束了,你可以使用你的核心方案(例如你必须create_superhero)的工具,但它会需要更长的时间才能到您的应用程序的核心。

没有必要要考虑的单元测试,层或嘲讽这里。这就是关于你如何做的事情的低级细节。只要你在你的web框架中有一些基本的能力,你应该开始探索你的域名,并使用BDD创建简单的工具,你可以用它来探索你的超级英雄世界。

祝你好运

+0

我得到了这一点,我真正体会到了答案,但我的问题是关于具体的Web应用程序,即从什么层的测试应该开始。我认为这是测试覆盖率,稳定性(端到端场景有点不稳定)和测试层次之间的平衡。 – acejazz

+1

答案适用于Web应用程序(现在我写的所有内容)。 BDD不是关于测试,而是关于发现行为和推动发展,这意味着在开始考虑覆盖和实施之前,你必须这样做。当你发现行为时,你应该从交互开始(在情景中的时候)。在Web应用程序中,这是用户和浏览器(主要是)之间的交互。所以你的'whens'应该使用浏览器。您的Givens可以更灵活,并且可以在设置状态时绕过浏览器。 – diabolist

相关问题