加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单元测试 – 如何正确创建功能,测试,故事并将其分解

发布时间:2020-12-13 20:46:02 所属栏目:百科 来源:网络整理
导读:我试图掌握整个TDD方法,因此,我真的不知道如何将其作为一个很简洁的问题来呈现,所以这里是冗长的版本. 我似乎正在经历保龄球(马丁),钱(羽毛)和其他类似的游戏/简单示例和功能齐全的企业应用程序之间的差距. 我试图弄清楚我是否遗漏了类似功能概念的东西,据我
我试图掌握整个TDD方法,因此,我真的不知道如何将其作为一个很简洁的问题来呈现,所以这里是冗长的版本.
我似乎正在经历保龄球(马丁),钱(羽毛)和其他类似的游戏/简单示例和功能齐全的企业应用程序之间的差距.

我试图弄清楚我是否遗漏了类似功能概念的东西,据我所知,这是增加商业价值的东西,或者在做TDD时如何正确地分离问题以及每种方法如何适用于另一个.
如果对功能的定义是一个很难的规则,那么记录和错误报告等功能就不是特征.这是否意味着TDD不提供记录和通知的方法?

不是试图开始任何战争,我很确定事实并非如此,所以我告诉自己“商业价值”必须将中间应用从客户业务价值转移到业务(应用的创建者)业务价值.

所以我试着像这个常见的例子那样切换它
从:
作为一个数学白痴
当我输入2时,按添加,输入2,然后按=
我要4回复.

至:
作为系统分析师监控系统
当用户输入导致未处理错误的函数时
我想要将应用程序的当前状态,抛出的异常和堆栈跟踪输入到日志中,并将电子邮件发送到系统分析师分发列表.

然后:
作为业务分析师,确保所有客户的订单得到处理
当用户提交电子订单并且路由或会计信息未验证时
我希望将无效的会计和路由信息输入到日志中,并将其与附加到业务分析师用户组的订单文件一起通过电子邮件发送.
除非问题是因为无法访问数据库以查找由于网络问题导致的客户信息,请输入“无法访问数据库以查找由于网络问题导致的客户信息”,并将错误消息发送到系统分析师分发清单.

然后开始扩展到我认为完全不可接受的东西:
作为电子订单完成检查
收到订单时
我想检查x12文件是否被翻译成平面文件,如果它验证或转换日志失败并通过电子邮件发送错误
提取订单信息和状态并将其加载到数据库中
平面文件被发送到队列到as400,状态更新到数据库
as400发送一个确认,表明他们已收到订单并且状态已更新到数据库
as400发送一个flatfile确认,状态更新到数据库
确认转换为x12,状态更新到数据库
x12确认被适当地路由,状态更新到数据库
确认将发送给客户,状态将更新到数据库
如果x12包含无效数据,请记录错误,发送电子邮件和
如果平板文件未在2分钟内拉出队列,发送电子邮件
n等可能出现错误情况的x次幂.

即使您将每个功能分解为自己的“功能”,您仍然会遇到日志问题,通知系统分析员应用程序发生异常或发生网络错误或找不到数据库等,或者业务组发现具有无法识别的帐号的订单是遇到过等
将这些中的任何一个添加到类中,作为方法,属性等似乎违反了单一责任原则.
大约那个时候事情开始旋转,我头晕,气短和心悸

所以,既然我对此感到困惑,以至于我不知道如何将其作为一个清晰的问题,我会试着总结一下.

你如何确定何时/何地以及如何分解这些东西并将它们分开?
很容易说将它们分解成提供商业价值的最小部分,但是当你不能拥有一件没有其他部分时,那么“真正的”答案是什么?所有这些都不适合一个粘性.

我愿意接受包括更多书籍,教程和视频在内的答案,但我认为,如果有一些真实世界的应用程序可以解释这些类型的东西,这些应用程序都遵循敏捷&可能提供最大价值的TDD原则?
不可否认,我对此比较陌生,但我已经阅读了Martin / Feathers / Osherove的书籍,我看过很多关于井字游戏,保龄球,素数等的katas,但是没有记录,没有错误报告没有这种“现实世界”的东西.

让我尝试别的.

我通过ftp从大型机获取一个文件,列出要与我们的供应商一起下的订单,这个文件称为摘要文件.我每5分钟检查一次这个文件.当有一个文件我解析它然后检查以确保我们通过MQ收到了这个摘要文件中列出的每个订单.作为双重检查,我还检查订单是否存在,因为如果未收到摘要文件,我们无法确保收到所有订单.有了这样说,以下看起来似乎我朝着正确的方向前进?

Feature: Check for the presence of a summary file
  In order to verify all orders were sent through MQ from the mainframe
  a summary file must be found to determine the expected orders.

  Scenario: A summary file has not been sent
    Given a summary file does not exist
    When I check for the existence of a file
    Then I should sleep for 5 minutes

  Scenario: A summary file has been sent
    Given a summary file does exist
    When I check for the existence of a file
    Then I should validate the summary file

Feature: Validate the summary file
  In order to process a summary file
  summary file must be valid

  Scenario: A valid summary file exists
    Given a valid summary file
    When I validate the summary file
    Then I should upload the order details to the order details DB.

  Scenario: An invalid summary file exists
    Given a invalid summary file
    When I validate the summary file
    Then I should log the errors encountered
    And email the erroneous file to the analyst email group

再次重复该操作,用订单替换摘要.这就是我想出来的.

你会想到:“……如果没有其他一些作品,你就不能拥有一件……”

故事分裂是一项技能.这需要练习,而且很难成为擅长. This page解释了这个概念,并提供了有关故事分裂的资源链接.

以下是您在分手时遇到问题的一个想法:

As a business analyst ensuring all customers orders get processed When a user submits an electronic order and routing or accounting information does not validate I want the invalid accounting and routing information entered into the log and emailed along with the order file attached to the business analyst user group. unless the issue is because the database could not be reached to lookup the customer info due to network issues enter “database could not be reached to lookup the customer info due to network issues” into the log and send an email with the error message to the systems analyst distribution list.

我看到该段中至少有4个故事:

>作为BA,由于帐户和路由信息无效而导致订单输入失败,我希望帐户和路由信息通过电子邮件发送到带有订单文件的BA组,以便有人知道获取正确的信息并重新输入订单.
>作为BA,由于帐户和路由信息无效导致订单输入失败,我希望在日志中输入帐户和路由信息,以便e具有无效信息的永久记录.
>作为BA,由于“无法访问数据库”导致订单输入失败,我希望通过电子邮件发送到SA列表的错误消息“无法通过网络问题查找客户信息的数据库”,以便数据库/网络问题可以分析和改进.
>作为BA,在由于“无法访问数据库”导致订单输入失败期间,我希望将错误消息“无法访问数据库以查找因网络问题而导致的客户信息”写入日志,以便我们拥有永久性记录数据库/网络问题.

如果你的团队做得好TDD,那么分别实现这些故事应该不会太困难.您的代码将受到测试保护,以便如果在卡4上工作的人打破了卡1的功能,希望测试能够捕获它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读