Spek是Kotlin一个很强大的行为驱动测试(behavior-driven testing)的框架。在android里使用spek2,我们可以很容易地定义一个清晰的,可读性高的测试用例。

地址:https://www.spekframework.org/

Spek2是在JUnit 5上运行的一个框架。在使用之前需要安装JUnit5.

安装JUnit 5

打开project级别的build.gradle,添加JUnit 5的仓库以及依赖:repositories {

maven { url "http://dl.bintray.com/jetbrains/spek" }

}

dependencies {

classpath "de.mannodermaus.gradle.plugins:android-junit5:1.5.1.0"

}

接着打开app级别的build.gradle,添加junit 5插件:apply plugin: "de.mannodermaus.android-junit5"

依赖如下:testImplementation "org.junit.jupiter:junit-jupiter-api:5.5.1"

testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.5.1"

安装Spek 2

在app级别的build.gradle,添加junitPlatform到testOptions中,如下:android {

testOptions {

junitPlatform {

filters {

engines {

include 'spek2'

}

}

}

}

}

接着添加spek2的依赖:testImplementation "org.spekframework.spek2:spek-dsl-jvm:2.0.7"

testImplementation "org.spekframework.spek2:spek-runner-junit5:2.0.7"

添加测试用例

如下是一个简单的数学类以及函数:class Math {

fun multiplication(x: Int, y: Int) = x.times(y)

fun division(x: Int, y: Int) = x.div(y)

}

添加测试用例如下:package com.project.myapplication

import org.junit.jupiter.api.Assertions.assertEquals

import org.spekframework.spek2.Spek

import org.spekframework.spek2.style.gherkin.Feature

object MathTest : Spek({

Feature("math") {

val math = Math()

Scenario("do multiplication") {

var a = 0

var b = 0

var multiple = 0

val result = 21

Given("initial a and b") {

a = 3

b = 7

}

When("multiple a with b") {

multiple = math.multiplication(a, b)

}

Then("it should return multiplication between a and b") {

assertEquals(result, multiple)

}

}

Scenario("do division") {

var a = 0

var b = 0

var division = 0

val result = 3

Given("initial a and b") {

a = 21

b = 7

}

When("division a with b") {

division = math.division(a, b)

}

Then("it should return division between a and b") {

assertEquals(result, division)

}

}

}

})

右键选择执行测试用例就可以看到结果了。

说明:

Spek通过GWT (Given When Then)的方式来书写测试用例,或者叫做情景。也就是说GWT分别代表了测试用例的三部分:Given:是测试用例的预设状态,可以认为是此情景下的预置条件。

When:表示行为执行的部分,可以认为执行逻辑的部分

Then:用于描述判断由于指定行为而您期望的更改

Spek通过把情景分为三部分,这样我们就可以很容易定义个基于行为驱动的开发的测试用例,具有很高的可读性。

kotlin测试android,使用Kotlin Spek 2来做Android的行为驱动测试相关推荐

  1. 【软件测试】资深测试聊一聊,测试架构师是怎么样的,做一名成功的测试工程师......

    目录:导读 前言 一.Python编程入门到精通 二.接口自动化项目实战 三.Web自动化项目实战 四.App自动化项目实战 五.一线大厂简历 六.测试开发DevOps体系 七.常用自动化测试工具 八 ...

  2. android 翻书动画效果怎么做,android ViewPager实现滑动翻页效果实例代码

    实现ViewPager的滑动翻页效果可以使用ViewPager的setPageTransformer方法,如下: import android.content.Context; import andr ...

  3. 超越Android:Kotlin在后端的工作方式

    by Adam Arold 亚当·阿罗德(Adam Arold) 超越Android:Kotlin在后端的工作方式 (Going Beyond Android: how Kotlin works on ...

  4. 神经网络API、Kotlin支持,那些你必须了解的Android 8.1预览版和Android Studio 3.0新特性

    曾仅用 55 秒发布会的 Android 8.0 Oreo 在时隔两个月后,Google 于今天在其官方网站上正式发布了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化 ...

  5. Android Studio kotlin编程实现图片滑动浏览 stepbystep

    1 基本介绍 参照 kotlin官网:使用 RecyclerView 显示可滚动列表的 案例实现 功能:采用RecyclerView 空间实现图片和文字的滚动浏览. 在下图显示的序列中,可以看到一个填 ...

  6. [Android]使用Kotlin开发Android(二)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4829007.html [TOC] 使用Kotlin+OkHtt ...

  7. 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )

    文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...

  8. android 多结点进度条,Android使用Kotlin实现多节点进度条

    时间轴主要使用Recyclerview来实现.开发语言使用Kotlin,代码相对java少了许多也简洁许多 效果图: MainActivity.kt package com.example.lee.l ...

  9. 用Kotlin开发您的第一个应用程序| Android与Kotlin

    In the previous article, we learned how to setup Kotlin in the android studio? Now moving to journey ...

最新文章

  1. @Bean修饰的方法参数的注入方式
  2. php插入代码数据库
  3. python 线程类 threading.Thread.run() 方法
  4. php静态变量的销毁
  5. HBase数据迁移到Kafka实战
  6. Java 多线程异常捕获Runnable实现
  7. 怎么结束linux里的redis进程,linux 怎么结束redis的monitor命令
  8. SQL Server 823,824 错误
  9. Microsoft caffe(caffe-windows) cifar实例编译之model的使用
  10. php一键环境包xammp 安装 phpDocumentor
  11. Linux实战教学笔记
  12. 林期苏曼属性标签编辑_CAD技巧之增强属性编辑器 属性文字
  13. Java到底能干什么?实事求是地说一下
  14. 计算机怎么切换到音乐,win10系统如何快速切换到下一首歌曲?
  15. 挂yy协议的服务器,yy协议挂机软件
  16. 定义范围中的备选方案生成、横向思维、创建WBS、工作包定义、WBS、确认范围过程和实施质量过程的关系、联合应用设计和质量功能展开QFD...
  17. Openwrt 15.05.1增加对MT7620a NAND flash的支持
  18. Java基础-Java概述(第一、二章)
  19. 怎么判断电脑是32位还是64位呢
  20. 路径规划算法C++实现(三)--DWA

热门文章

  1. 基于临近图片相似性分析的图片碎片拼接算法matlab仿真
  2. 树莓派4B的初步认识
  3. 哔哩哔哩全屏观看直播看不到弹幕?
  4. 相关滤波跟踪·KCF公式详细推导
  5. 最新转转+闲鱼源码2.0版本带独立后台+个人二维码收款
  6. 分布式体系架构与分布式计算相关问题
  7. 川大计算机非全日制专业课,2018年四川大学在职研究生非全日制考试科目有什么?...
  8. python requests库下载图片保存到本地
  9. Seo新手入门,网络编辑如何写好文章(写文章技巧)
  10. 项目经理进行竞品分析时可以参考的几个网站