当前位置: 首页 > 工具软件 > Spek > 使用案例 >

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

印瑾瑜
2023-12-01

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

 类似资料: