在野外有很好的黄瓜例子吗?

如何解决在野外有很好的黄瓜例子吗?

| 几年前,我已经尝试了Cucumber的几个项目,并希望再次尝试。我真的不需要另一篇“开始黄瓜”文章。取而代之的是,我想看看野外的一些实际用法,一个是其他Cucumber用户会认为是惯用且没有反模式的。 那么,您认为大型项目中实际黄瓜规格的最佳示例是什么?     

解决方法

您可以阅读侨民的黄瓜测试。这是一个很大的项目,所以我认为您可以从中学到一些东西。     ,您可以阅读Cucumber本身的功能,这些家伙应该知道他们在做什么: https://github.com/cucumber/cucumber-ruby/tree/master/features     ,这不是直接的答案,但我不同意您提出问题的前提,但有解决方案,因此无论如何我都会给出我的意见。   其他黄瓜用户会考虑使用惯用且无反图案的 我认为,这一声明令人遗憾地无法实现。 这里的Brandon Keepers of CollectiveIdea采取了通常的立场,即您应该朝着通用的,可重复使用的步骤努力,这从一般的“不要重复自己”的角度来看是有意义的。 但是,这里是Cucumber的作者AslakHellesøy,他也持有一种普遍(但互斥)的观点,即您应该努力进行针对特定场景的步骤,这从“为什么要使用Cucumber? ” 从上面链接的“训练轮退出”中,Aslak给出了两个示例方案,以鲜明地对比这两种样式:可重用步骤与特定于方案。 经过多年在两种样式中使用Cucumber并考虑到以上难题,这些是我的结论: 可重复使用的步骤成为维护的噩梦,因为您需要支持更复杂的步骤定义,同时还要避免命名冲突。 特定于场景的步骤是易读性和简化性的首选,但由于命名冲突,它们也成为维护的噩梦。 因此,我确定Cucumber当前已损坏,并且在您喜欢的单元测试框架之上的普通Capybara是最灵活的。 如果黄瓜选择了,它们可以添加方案上下文,特定功能的方案,方案名称空间等,以便您可以按某种方式对方案进行范围划分(按功能,用户角色,只要有意义),并极大地减少命名冲突,以进行特定于方案的步骤真正可行。到那时,我认为将会有明显的风格赢家。在此之前,始终存在这样的压力:需要抽象化您的步骤来避免命名冲突,以及为了简化和易读而希望针对特定情况进行处理。 试图解决这些缺点的另一个项目是Spinach,但是该项目并不是那么活跃。在这里查看我对菠菜与黄瓜的评价。     ,我也在寻找黄瓜项目。实际上,Cucumber的存储库上有一个Wiki页面,其中包含此类项目的列表(尽管并非所有项目仍在使用Cucumber): 使用黄瓜的项目: 宝石切割机 间隙
/generators/clearance_features/templates/features/
Web果酱
/features/
雷德卡
/plugins/*/features
珠宝商
/features
杰基尔
/features
载波波
/features/
RadiantCMS OERPS场景(链接到OpenERP) WontoMedia
/features/
Rails目录 肉汤 Heroku吊带裤 时光飞逝 散居 厨师 来源:https://github.com/cucumber/cucumber/wiki/Projects-Using-Cucumber     ,我建议: https://github.com/teambox/teambox/tree/dev/features 更新:正如Ivailo Bardarov所提到的,他们使用websteps,这是目前的不良做法。只是将此作为参考,以了解良好的功能而不是步骤! 更新2:我认为是后期,我从Object on Rails的付费版本提供的黄瓜功能中学到了很多东西。源代码不是开源的,因此我无法在此处发布或找不到指向它的链接。 我的首选方法是使要素语言与领域/业务语言保持一致,而不是使特定的步骤或填写表单。因此,在我的功能中不要像这样:
When I fill in \"Name\" with \"XYZ
我的功能会说:
When I create a project:
| name |
| xyz  |
然后,我的步骤将具有单击链接,解析表并填写相关表单字段等的代码。     ,我们正在当前项目中使用Cucumber进行Web应用程序重新设计,但是它不是开源的,因此我无法提供一组实际的功能和步骤。 我要说的是,这两个示例中的“页面对象”模式极大地启发了我们。没有UX小组,我们正处于繁重的UI重构之中。使用Page Objects使测试适应这些更改变得相当简单。     ,我希望我可以从我们的公司仓库(《财富》 500强的大型内部网络应用程序)中发布这些内容。 最好的可能是Wikipedia的测试: https://github.com/wikimedia/qa-browsertests 您确实需要使用页面对象进行抽象。即使这样,当您的应用程序超过30个输入屏幕时,您的测试也很难抽象。 我有一种实验方法,可以快速抽象出没有循环的通用路径;应该可能将其清理并作为拉取请求发送给Cheezy:https://github.com/cheezy/page-object     ,大型项目的一个常见问题是Cucumber功能需要花费很多时间来编写。 因此,涉及许多策略: 如果您使用黄瓜来描述旧系统,则可以通过黄瓜和水豚获得不错的验收测试覆盖率,然后重构您的黄瓜步骤定义。 如果单元测试正确,请使用Cucumber仅描述应用程序的满意路径,或仅描述必要的不满意路径。使用RSpec(或选择的Xunit)获得覆盖。 Cucumber的关键问题在于,这些功能应该以很高的层次描述功能。您需要将步骤定义设置为DRY并且可重用,并且我喜欢重定向步骤定义,以使涉众感兴趣的功能简洁明了。尽管我认为这一点可能会引起争议。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-