在充满“代码漏洞”的配置并讨论了需要添加到原始堆栈的内容之后,我们准备开始我们的第一个用户故事:着陆页。

水果车:游戏测试规则

我们的初始页面旨在显示导航栏以及数据库中所有水果的列表。 用户故事非常简单,以“按原样,想要,这样”的格式完成:作为用户,我想访问登录页面,以便可以看到所有当前成果的列表。 我们有一个上下文(用户),一个操作(访问登录页面)和一个值(查看当前结果)。

水果车:游戏测试规则

接受标准很少而且同样简单:如果没有水果,则用户应该看到“添加水果”消息; 如果有水果,用户应该看到水果。 (回想起来,错误处理也应该是AC:如果页面无法加载,则会显示错误消息。)

水果目前只有一个ID,名称和描述-相当简单的数据。 现在,导航栏是一张单独的卡片,因此我们只关注水果清单。

下一步:完成任务。 为了完成AC和完成卡,我们需要做什么以及需要触摸什么文件?

水果车:游戏测试规则

随着数据库的建立,我们需要一个水果模型(我们的后端是面向对象的),水果存储库来处理SQL到模型的映射,水果服务来处理业务逻辑以及水果控制器来提供实际的端点并处理调用。 我们必须在同一包中为所有目录创建目录和文件夹。 但首先要注意的是:测试。

水果车:游戏测试规则

该项目的主要目标是使用TDD或测试驱动器开发来创建一个简单的CRUD应用程序。 这实际上是什么意思:

  • 我们先写测试每当启动新功能时,测试就是我们编写的第一行代码。 因此。 。 。测试定义生产代码他们定义首先编写什么代码。 他们驱动代码。 例如:我们知道我们的水果购物车服务需要在以下情况下返回名称为“ apple”的水果项目:getAllFruits()方法被调用。 所以我们写了一个测试getAllFruits(),结果应包含字符串“ apple”。 这使我们能够牢记结果和期望,并最终变得更具价值驱动力。 毕竟,如果您不知道要执行的代码,为什么要首先编写它?测试与生产代码一样重要我们花相同的时间编写好的测试和好的代码。 它们不是事后的想法,它们使我们能够以称为的增量方式编写更简洁,更集中的代码。 。 。

水果车:游戏测试规则

  • 婴儿脚步我们一次迈出一步。 如果通过硬编码字符串“ apple”的返回值使服务通过上述测试是最容易的,那么我们就是这样做的。 测试将通过,我们可以继续进行下一步:重构。红色,绿色,重构啊,TDD的核心。 编写测试,使其失败(红色)。 编写代码,并以最简单的方式使其通过(绿色)。 就像上面的示例一样,这最初可能意味着硬编码。 然后重构您的代码。 硬编码值是一种代码味道,因此在这种情况下,您可以将其重构。 每次进行可能会改变返回值的更改时,请运行测试。

水果车:游戏测试规则

  • 更改测试或代码,而不要同时更改现在,测试可以像代码一样重构。 但是您不想同时更改两者,运行测试并观察它们失败。 然后您将不知道实际失败的原因:新重构的代码或新重构的测试。 此外,您实际上可能正在更改测试期望的行为,从而使以前的可靠代码失败。

水果车:游戏测试规则

  • 测试金字塔We'llbefollowingtheclassictestingpyramid.单元测试将构成我们测试套件的大部分这些测试是针对离散方法进行的,并且有具体的期望。例如,如果我运行getAllFruits()从数据库中获取所有水果信息的方法,我应该对其返回值抱有坚定的期望(例如,一组水果对象,其中一个包含名称“apple”)。它们的优点是速度快且体积小:当它们失败时,它们很快就会失败,因此我们获得了几乎即时的反馈(假设我们定期进行测试);当它们失败时,它们会因为一项功能而失败,因此很容易确定哪一行代码失败。另外,它们需要更少的资源来运行。带有Hamcrest库的JUnit将成为我们在后端的朋友,而Jest和Enzyme将成为React前端的朋友。IntegrationtestsformourmiddleranksTheseareslightlymoreexpensiveintermsofcomputingresources,buttheytesttheconnectionsbetweenthemovingparts.Forinstance,ourcontrollertestsareactuallyintegrationtests--whenwehitanendpoint,thecontrollercallstheservicewhichcallstherepositorywhichcallsthedatabasetogetthefruits.Severalmethodsacrossmultipleclassesarecalledhere,andwewanttomakesureeverythingworks.Thesearelarger,requiremockingandstubbing(whichwewillreturntoinadifferentpost),andspanacrossmultipleclasses.Theymakesureeverythingworkstogether,butwhentheyfail,theytakelongertodoso,anditcanbehardtotellwhat,exactly,isfailing.We'lladdMockitotoJUnitforthesetests.FunctionalorUItestssitatthetopTheytesteverything--userinterface,database,services,etc--tomakesureitallworkstogethercorrectly.Forinstance,whenauserlandsonourpage,theyshouldseeallthefruitslisted.That'sthefrontandbackendpiecesallworkingtogetherforasingleresult.Theseteststakelongerandmayrequireazombiewebbrowsertobespunupandsimulateuserinteractions.Whentheyfail,itcanbeextremelydifficulttotellwhy.Seleniumwillbeourtoolofchoicetoautomatethese.

水果车:游戏测试规则

这些是规则! 让(水果)游戏开始!

from: https://dev.to//sleepycecy/fruit-cart-testing-rules-of-the-game-1k0

相关文章: