使用 Cucumber Java 进行 BDD 测试循序渐进

不得不承认因为 ChatGPT 为代表的 AI 的出现,让许多技术博客的写作者积极性大大降低。但本着以学习掌握知识为目的,实战,写下来对加强学习仍然是非常有意义的。如果一直使用 AI 来解决技术问题,知识永远是 AI 的,至于说有了 AI 本应没有主动学习必要的性的话,永远保持像一张白纸,A4 大小,那真就无话可说了。

开发过程驱动有分 TDD(Test-Driven Development) 和 BDD(Behavior-Driven Development),大致的理解是 TDD 更关注实现细节,BDD 更接近于 QA 的测试,对领域的测试。BDD 从抽象中来讲更适于做面向用户的集成测试。当然在 AI 生成代码的年代可能单玩测试反而不那么重要,因为更多是一次性代码。

BDD 给人最典型的印象是 Scenario/Given/When/Then, BDD 最流行的测试框架当属 Cucumber, 它以插件的方式支持众多编程语方,如官方支持的用 JavaScript, Java, Kotlin, Ruby, Lua, Scala, C++, Go, OCaml, 还有其他半官支持的 Python, Swift/ObjC, Perl, .NET(C#, F#, VB), 以及非官方支持的 Rust, D, Groovy 等。

另外还有一个专供 Java 的轻量级 JBehave, 不过个人更推荐用 Cucumber, 因为 Cucumber 得到更多 IDE 如 IntelliJ, Eclipse, VS Code 等的支持,并能与 JUnit 4, JUnit 5, TestNG, 以及  Spring Boot 项目集成,内置的测试报告插件,多语言当然是个亮点。

本文主要关注 Maven 项目中如何使用 Cucumber, 循序渐进的从简单的测试开始,然后跃进到与 JUnit 5/ JUnit 4 的结合,以及普通 Unit Test 和 BDD 测试如何并存且可区分的执行,或者在 Maven 中创建独立的  src/bdd 目录单独存放 BDD 测试用例。 阅读全文 >>

走近 Ruby 的世界(四)

Ruby 解释器给我们提供了四个常用的命令行工具,ruby、irb、ri 和  gem。动态脚本语言的解释器类似工具的使用方法基本一致的,逐个来看下它们的用法:

1. ruby:脚本解释器,直接执行脚本或脚本文件

% ruby -e 'puts "hello world!"'
% ruby hello.rb

ruby 显示输出可以用三种方法:print、puts 和 p,print 和 puts 都会把操作对象的 to_s 返回值输出,只是 puts 会在输出内容没有换行时加上一个换行,有则和 print 是一样的。例如 puts "Hello World!" 就是 print "Hello World!\n",puts "Hello World!\n" 也是  print "Hello World!\n"。p 会调用对象的 inspect 方法进行输出,最后加不加换行与 puts 的规则是一样的。

2.    irb:(Interactive RuBy) 是个 Ruby 的交互命令行,可用来测试一些 Ruby 的特性,不过有 TextMate 那样的工具基本不会去用它。你还能在 irb 的 shell 下再次输入 irb 启动一个子 shell。 阅读全文 >>

走近 Ruby 的世界(一)

因工作需要,需用到 Ruby 来写 BDD(Behaviour Driven Development) 的脚本,这样的话还是希望自己对 Ruby 有一定程度的了解,不能总是依葫芦画瓢吧。

Ruby 是由松本行弘(Yukihiro Matsumoto, 简称:Matz) 发明的,确实应该佩服一下,不存在什么民族情节的,比起所谓的汉语编程要强上千百遍,再说,通常民族情节都为政治所利用的。蒙牛、百度,腾讯等等 ,民族品牌,狗屁,都是某些个岛国注册的。

Ruby is designed to make programmers happy. Ruby 吸收了 List、Smalltalk 和 Perl 的灵感,采用了类似于 C 和 Java 的语法。

Ruby 是完全面向对象的编程语言(completely object-oriented language),不像 Java 和 C 存在基本(原始)类型,在 Ruby 的世界里,什么都是对象,像数字,true、false 或  nil 都是对象,它们有自己的属性和方法,你可以对它们点一下点出东西来。如: 阅读全文 >>