黄瓜与 Junit

Cucumber vs Junit

我想问一下 Cucumber 和 JUnit 之间的实际区别是什么。我根本没有和 Cucumber 一起工作过;找到了一些文档,但我非常感谢曾与两者合作过的人的一些反馈(对高级别概述感兴趣)。

分解一下——我感兴趣的是什么(我将使用 Selenium 而不是 Protractor):

  1. 与 Junit 相比,Cucumber 有什么做不到的吗?
  2. 什么更容易使用(编码、编写测试的速度)?
  3. 两者都适用于页面对象?

我需要完成的一些事情

  1. 测试css样式
  2. 测试页面响应能力
  3. WebElements 上的标准操作(点击、获取数据等)
  4. 断言。

除此之外的任何内容都非常受欢迎。非常感谢您对此的回答,谢谢!

简而言之,这两者在完全不同的抽象层次上工作。

JUnit主要是一个自动化框架;让您能够使用 Java 编程语言快速编写测试用例。它提供了注释,可以轻松声明:"this method over here is a JUnit test"。它旨在作为 unit tests 的框架;但许多人也用它来驱动全尺寸 "integration" 或 "function" 测试。

另一方面,

Cucumber 在更高的抽象层次上工作。您首先以纯文本形式编写 "test descriptions"。可能导致关键区别:你不需要知道 Java 来编写黄瓜测试(你只需要 java 程序员提供 "glue code" 让黄瓜变成你的一些可执行代码中的文本输入)。

从这个意义上说,你不知何故要求我们在这里比较苹果和萝卜;因为人们会将这两个工具集用于另一组 "problem solution"。但正如划定的那样;您还可以使用 JUnit 来驱动 "bigger" 测试;因此,这两个工具之间的主要区别在于您所处理的 抽象 级别。

编辑:您的评论是正确的;由于这些工具适用于不同的 "settings",您不应指望非技术人员能够使用 Cucumber 编写涵盖所有内容的良好测试。 Cucumber 是一种让非技术人员参与创建测试的好方法;但最终,您解决的是技术(java 相关)问题;因此,您有时需要 Java 编程专业知识。 "within the same person";或者至少在你团队中的不同人中。

JUnit 和 Cucumber 的目标不同。它们是相互补充而不是相互替代。

Are there any things that Cucumber can't do vs Junit.

Cucumber 不能用 JUnit 做任何事。反之亦然。

不同之处在于,JUnit 旨在测试,而 Cucumber 旨在与非技术人员协作。非技术人员不会理解单元测试的作用。但是,他们将能够理解和验证用 Gherkin 编写的示例。

What's easier to use (coding, how fast you can write the tests) ?

使用 Cucumber 时会产生更多开销。您必须将每个步骤作为一种方法来实现,而不是像使用 JUnit 时那样只是一种测试方法。使用纯文本表达示例所获得的可读性有时值得额外的工作。

Both work with Page Objects?

页面对象是您正在验证的网页的抽象。它是一个 class 你写成 developer/tester。 JUnit 和 Cucumber 都可以使用页面对象。其实从那个角度看,工具之间并没有什么区别。

选择使用 JUnit 还是 Cucumber 是粒度和受众的问题。

一个运作良好的工作流程是混合使用这些工具。使用 BDD(Cucumber、Gherkin)定义应用程序应如何工作的示例。使用 Cucumber 实现这些场景。然后,使用 JUnit 计算出对高层业务利益相关者来说可能重要但不一定重要的细节。考虑一些重要但对利益相关者而言过于详细的极端案例。

此处提供描述此组合的图片:https://cucumber.io/images/home/bdd-cycle.png

前阵子我写了博客 post,其中我谈到了适合该工作的工具:http://www.thinkcode.se/blog/2016/07/25/the-right-tool-for-the-job

正确的工具可能是 Cucumber。它也可以是 JUnit。这完全取决于您的观众。

Cucumber 似乎让用户更加友好,但我认为业务分析师并不真正关心它是什么。最终,开发人员必须编写单元测试、集成测试、Cucumber 测试(因此 Cucumber 对于已经编写了单元测试和集成测试的开发人员来说毫无意义,业务分析师不在乎,因为他们已经提供了他们想要的东西)。