黄瓜 vs 朱尼特
Posted
技术标签:
【中文标题】黄瓜 vs 朱尼特【英文标题】:Cucumber vs Junit 【发布时间】:2017-02-04 23:48:21 【问题描述】:我想问一下 Cucumber 和 JUnit 之间的实际区别是什么。我根本没有和 Cucumber 合作过。找到了一些文档,但我非常感谢曾与这两者合作过的人的一些反馈(对高 lvl 概述感兴趣)。
分解一下——我感兴趣的是什么(我将使用 Selenium 而不是 Protractor):
-
Cucumber 与 Junit 有什么不能做的事。
什么更容易使用(编码,编写测试的速度)?
两者都适用于页面对象?
我需要完成的一些事情
-
测试 CSS 样式
测试页面响应能力
WebElements 上的标准操作(点击、获取数据等)
断言。
除此之外的任何内容都非常受欢迎。非常感谢您对此的回答,谢谢!
【问题讨论】:
看看QAF-gherkin客户端qmetry.github.io/qaf/latest/qaf-gherkin-client.html这里你检查文档qmetry.github.io/qaf/qaf-2.1.9/gherkin_client.html 【参考方案1】:Cucumber 似乎使某些东西更加用户友好,但我认为业务分析师并不真正关心它是什么。最终,开发人员必须编写单元测试、集成测试、黄瓜测试(因此 Cucumber 对已经编写过单元测试和集成测试的开发人员毫无意义,业务分析师不在乎,因为他们已经提供了他们想要的东西)。
【讨论】:
【参考方案2】:JUnit 和 Cucumber 的目标不同。它们相互补充而不是相互替代。
Cucumber 和 Junit 有什么不能做的事。
您可以用 JUnit 做任何您不能用 Cucumber 做的事情。反之亦然。
不同之处在于,JUnit 的目标是测试,而 Cucumber 的目标是与非技术人员协作。非技术人员不会理解单元测试的作用。但是,他们将能够理解并验证用 Gherkin 编写的示例。
什么更容易使用(编码,编写测试的速度)?
使用 Cucumber 会产生更多开销。您必须将每个步骤作为一种方法来实现,而不仅仅是一个测试方法,就像使用 JUnit 时所做的那样。使用纯文本表达示例所获得的可读性有时值得付出额外的努力。
两者都适用于页面对象?
页面对象是您正在验证的网页的抽象。这是您作为开发人员/测试人员编写的课程。 JUnit 和 Cucumber 都可以使用页面对象。事实上,从这个角度来看,工具之间没有区别。
选择使用 JUnit 还是 Cucumber 是粒度和受众的问题。
一个运作良好的工作流程是混合工具。定义应用程序应如何使用 BDD(Cucumber、Gherkin)工作的示例。使用 Cucumber 实现这些场景。然后,使用 JUnit 制定对高层业务利益相关者可能重要但非必要重要的细节。考虑一些重要但对利益相关者来说细节过多的极端案例。
此处提供了描述这种组合的图片:https://cucumber.io/images/home/bdd-cycle.png
我不久前写了一篇博文,谈到了适合这项工作的工具:http://www.thinkcode.se/blog/2016/07/25/the-right-tool-for-the-job
正确的工具可能是 Cucumber。它也可以是 JUnit。这完全取决于您的观众。
【讨论】:
谢谢,这真的结束了这场辩论,至少对我而言 观众总是有问题吗?我的意思是,如果您正在编写普通的旧单元测试,您会使用 cucumber 吗? 如果受众是开发人员,我不会考虑 Cucumber。我会将 JUnit 视为一种测试工具。如果一个示例必须由业务分析师或产品所有者确认,我会考虑将 Cucumber 作为一种交流工具,每个人都可以阅读和理解示例。在那种情况下,我使用 Cucumber 进行通信,而不是作为测试工具。【参考方案3】:简单地说,这两者在完全不同的抽象层次上工作。
JUnit主要是一个自动化框架;使您能够使用 Java 编程语言快速编写测试用例。它提供了易于声明的注释:“这里的这个方法是一个 JUnit 测试”。它旨在作为 unit tests 的框架;但许多人也使用它来推动全面的“集成”或“功能”测试。
另一方面,Cucumber 工作在更高层次的抽象上。您首先用纯文本编写“测试描述”。导致可能的关键区别:您不需要了解 Java 来编写黄瓜测试(您只需要一个 Java 程序员提供“胶水代码”,允许 Cucumber 将您的文本输入转换为一些可执行的代码) .
从这个意义上说,您不知何故要求我们在这里比较苹果和萝卜;因为有人会将这两个工具集用于一组不同的“问题解决方案”。但正如划线的那样;您还可以使用 JUnit 来驱动“更大”的测试;所以这两个工具之间的主要区别在于您正在处理的抽象级别。
编辑:您的评论是正确的;由于这些工具用于不同的“设置”,因此您不应期望仅非技术人员就能够使用 cucumber 编写涵盖所有内容的良好测试。 Cucumber 是一种让非技术人员参与创建测试的好方法;但最终,您正在解决技术(Java 相关)问题;因此,您有时需要 Java 编程专业知识。要么“在同一个人内”;或者至少在团队中的不同人员中。
【讨论】:
感谢您的回答。基于此,由于 Cucumber 有不同的方法(“您首先用纯文本编写“测试描述”。导致可能的关键区别:您不需要了解 Java 来编写黄瓜测试“)不会当我想深入测试时,这会导致一些问题吗?或者遇到 Cucumber 仅凭此无法解决的问题?以上是关于黄瓜 vs 朱尼特的主要内容,如果未能解决你的问题,请参考以下文章