Junit 应涵盖哪些类型的案例,Cucumber 应涵盖哪些案例

What type of cases should be covered under Junits and which ones under Cucumber

开发人员通常使用Junits

编写测试用例

测试人员通常用Cucumber

编写测试用例

我很困惑,这些(Cucumber 和 Junit)有何不同,如果最后,两者都是为了验证我们代码的逻辑!

我的假设是否正确,如果我说...

Cucumber 是一个行为驱动设计 (BDD) 框架。在哪里可以检查一段代码的行为。

JUnit 是一个较低级别的 "Unit test" 工具,允许开发人员测试代码的每个可能部分。

为了更清楚,您可以选择

单元测试,顾名思义,就是用来测试小的代码单元的。单元测试是用代码编写的,这使得它对业务的可读性较差,但也使其非常强大并且可能非常快。

Cucumber 是一种用来描述行为的工具。每个 cuke 将 exercise 更大的代码块。

这两种考试有很大的不同。如此不同以至于大多数 Cucumber 爱好者不想使用测试这个词(https://cucumber.io/blog/collaboration/the-worlds-most-misunderstood-collaboration-tool/)

场景根本不是关于验证代码逻辑的,它们与代码无关。它们是关于描述您的应用程序的行为并支持该行为的发展。在实施场景和行为后,它们用于确认行为 'probably' 仍在按预期工作。

单元测试都是关于代码的,它们是用代码编写的,并且(理想情况下)直接连接到代码。它们绝对可以用来验证代码的逻辑。

还有其他一些主要差异

运行时间

  • 场景很慢
  • 单元测试很快(除非它们写得不好)

这个差距可不小。一个优化编写的单元测试可以比一个优化编写的场景快 1000 倍。

表现力和力量

  • 场景使用自然语言来表达自己。他们使用抽象和命名来行使权力。写得好的杯子很容易被企业阅读

  • 单元测试使用代码来表达自己并发挥作用。他们要强大得多。然而,他们更难表达自己。利益相关者无法阅读单元测试。对于非编码人员来说,即使是编写精美的单元测试的输出也很难阅读

总结

你有两个截然不同的事情,以不同的方式工作,使用不同的工具(自然语言与代码)。因此,您拥有不同的工具也就不足为奇了。

不幸的是,我们有很多人使用 Cucumber 作为测试工具来编写类似单元的测试,而且我们有很多人使用单元测试工具来编写测试大块代码的慢速测试。这两件事都是可能的,甚至可能是可行的,但它们远非最佳。

所以,我将举一个例子,解释 Cucumber 域与 Junit 域之间的区别

考虑 Web 应用程序的示例..

  • Junits 将测试控制器、服务和 DAO 层涉及的方法的代码逻辑

  • 此应用程序的 Cucumber 测试,将承担具有各种 REST 请求的情况,由此应用程序的 API 公开。 [它将有 Get、Post、Put、Delete 的测试请求,每个请求都有多个数据,视情况而定]