Cucumber概念解析与Java入门实例 (下)
来源:互联网 发布:php倒计时提示 编辑:程序博客网 时间:2024/05/16 19:03
在前两篇中,我们介绍了Cucumber及相关的核心概念,并逐步在Checkout项目实现中了解其作为自动化测试的工作流程。现在我们来完成最后的工作吧!
有需要的话可以回顾:
Cucumber概念解析与Java入门实例 (上)
Cucumber概念解析与Java入门实例 (中)
添加断言
为了让最后一个step也通过,修改其step定义如下(同时不要忘记把要调用的checkout实例提出置为全局的):
Checkout checkout;@When("^I checkout (\\d+) \"(.*?)\"$")public void iCheckout(int itemCount, String itemName) throws Throwable { checkout = new Checkout(); checkout.add(itemCount, bananaPrice);}@Then("^the total price should be (\\d+)c$")public void theTotalPriceShouldBeC(int total) throws Throwable { assertEquals(total, checkout.total());}
我们使用JUnit断言来检查feature中我们的预期结果是否符合Checkout的实际结果。如果不相符,JUnit会引发错误。在编译之前,我们需要在下载最新的JUnit JAR
放入jars文件夹中。
就在3天前(2017.7.9),JUnit团队release了JUnit5 M5版本,由于还没有正式版本的发布,我本着怎么可以不尝鲜的人生信条进行了配置,有很多新鲜事,不过配置起来相比正式版本还是相对繁琐,所以为了我们项目的可复现性以及正确性,我们还是使用稳定的最新版JUnit4的Jar包吧,同样可以从maven仓库下载到:http://mvnrepository.com/artifact/junit/junit/4.12
同时我们也要在step_definitions/CheckoutSteps.java中添加import入JUnit的语句:
import static org.junit.Assert.*;
再在Checkout类中增添total()的实现:
public int total() { return 0;}
运行./cucumber,我们将得到一个典型的失败的测试用例输出:
很棒! 现在我们的测试用例失败得合乎情理,它正在使用Checkout,检查购物总价,并告诉我们正确的总价应该是什么。
让它通过吧!
是时候想出一个解决方案让我们的scenario测试通过了。
当然,有一个相当耿直的方法让它通过,编辑Checkout.java如下:
package implementation;public class Checkout { public void add(int count, int price) { } public int total() { return 40; }}
运行一下:
先高兴一分钟!至少通过了!
不过,这样的方法很明显会使得我们的测试不可用:其一,我们没有利用上任何的输入数据;其二,我们根本没有实际地做加法。
是时候做一下调整了,让我们在feature中加入一个新的scenario,不过并不是机械性地复制,而是使用一个全新的关键字 – Scenario Outline
修改features/checkout.feature:
Feature: Checkout
Scenario Outline: Checkout bananas Given the price of a "banana" is 40c When I checkout <count> "banana" Then the total price should be <total>c Examples: | count | total | | 1 | 40 | | 2 | 80 |
我们已经将scenario变成了一个Scenario Outline
,其让我们使用一个表来指定多个scenario,使用Gherkin语法确实很酷!
让我们看看现在的输出如何:
可以看出,两个scenario,第一个仍然结果会是40的自然会passed,而第二个也很容易预测会failed。
好啦!亮出我们的正确解法吧!编辑implementation/Checkout.java如下:
package implementation;public class Checkout { private int runningTotal = 0; public void add(int count, int price) { runningTotal += (count * price); } public int total() { return runningTotal; }}
我们使用实例变量runningTotal来存储我们计算出的总售价,在add方法中实现计算得到正确结果,并通过total方法返回。
最后一跑:
$ ./cucumber
完美:
我们一步一步地成功完成了Cucumber的第一大步 : )
感谢大家和我一起实作!
Have a nice day!
- Cucumber概念解析与Java入门实例 (下)
- Cucumber概念解析与Java入门实例 (上)
- Cucumber概念解析与Java入门实例 (中)
- Cucumber-java入门基础篇
- Java DataInputStream与DataOutputStream 入门实例解析
- Maven入门--概念与实例
- Maven入门--概念与实例
- maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Maven入门--概念与实例
- Android 原生应用嵌入React-Native模块开发-环境配置及填坑记
- bodyparser的作用
- CodeForces
- 朴素贝叶斯
- 集合中null和size==0的区别
- Cucumber概念解析与Java入门实例 (下)
- 携程Android App插件化和动态加载实践
- 文件系统层次标准FHS的详细介绍
- android基础知识---不同app的跳转,及进程的控制
- 【通信方式五】socket编程之TCP通信
- Android UI 切图命名规范、标注规范及单位描述
- (考试)2017年大一下学期C++期末考试题目四
- 使用response实现一些小功能
- 面试:android图片中的三级缓存