我想开始一个宠物项目,以便从头开始创建Web应用程序,并且我想使用BDD和TDD。 我在“面向对象的软件增长:测试指导”中读到,我们应该从系统的最薄片开始,这样我们就可以拥有整个应用程序的行走骨架,这样我们就可以快速反馈并开始对生产/部署程序。
在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开始,但这不是端到端测试,但我们只会部分测试应用程序。
答案 0 :(得分:1)
Cucumber是BDD的一个很好的框架。 UI / Selenium测试可能有点不稳定,所以我建议少一些(参见测试金字塔)。 我个人认为我会像你为初学者建议的那样在API级别工作,然后你将UI与应用程序分离。
在API级别编写一些应用程序的Cucumber集成测试(BDD),描述高级功能。我不会在这个级别上嘲笑,因为你想看到整个应用程序在这一点上工作。
然后在实现这些时,使用TDD,在这里你需要模拟文件IO /数据库之类的外部。完成所有TDD单元测试后,应该通过整体功能。继续,直到完成所有功能。
继续这样,然后你就可以在API级别拥有一套可靠的单元测试和一组可靠的集成(功能)测试。
一旦完成(或并行获得垂直切片)使用“快乐的一天”场景硒测试启动UI,所有真正需要测试的是UI代码并且正确地连接到App,作为主要应用程序已经过充分测试。
我的观点 - 希望它有所帮助。
答案 1 :(得分:0)
我为此使用了Cucumber(但我非常偏颇),我首先要围绕应用程序的核心部分编写一些场景。
编写方案时要遵循的一些重要规则
因此,对于您的超级英雄网站,您可以从思考开始时需要做的事情开始。
通常,当您发现资源(超级英雄)时,您将可以探索一些基本的CRUD操作,所以
让我们开始比较超级英雄的情景
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
现在让我们开始实现这个场景。这里一个重要的事情是不要将所有代码放在步骤定义中。而是将每个步骤定义调用为辅助方法。
注意:以下所有代码都是ruby
Given 'there are superheroes Batman and Superman' do
create_superhero batman
create_superhero superman
end
现在我们可以进入BDD红/绿测试周期了。
因此,我们将开始收到No method found create_superhero
和undefined constant batman
等错误。我们可以在步骤定义中使用辅助模块解决这些问题。
module CreateSuperHeroStepHelper
def create_superhero(attrs={})
Superhero.create(attrs)
end
def batman
{
...
}
end
...
end
从这段代码中我们可以开始处理我们应用程序的域对象,例如超级英雄。
要使此步骤正常工作,您必须与底层Web框架进行交互。一旦你有了它的工作,你可以用最基本的形式进入下一步。
在此过程中,您将对下一步做什么做出各种选择。如果您坚持使用这个核心方案,那么您必须聪明地了解如何实现这些方案。如果您决定处理看起来像先决条件的方案,例如用户帐户,创建超级英雄,输入您的超级英雄特征,添加超级英雄特征。然后,您最终应该使用可用于核心方案的工具(例如,您将拥有create_superhero
)但是您需要更长时间才能进入应用程序的核心。
这里没有必要考虑单元测试,图层或模拟。这是关于你做什么事情的低级细节。只要您在Web框架中具备一些基本能力,您应该开始探索您的域并使用BDD创建可用于探索超级英雄世界的简单工具。
祝你好运