[Kotlin Unit test] Spek & Mock

buildscript {
    ext.kotlin_version = '1.1-M01'
    ext.kotlin_gradle_version = '1.1-M01'

    ext.mokito_kotlin_version = '0.6.0'
    ext.spek_version = '1.0.89'
    ext.junit_version = '5.0.0-ALPHA'
    ext.junit_platform_gradle_plugin_version = '1.0.0-M2'
    ext.hamkrest_version = '1.2.2.0'


    repositories {
        mavenCentral()
        maven {
            url "https://dl.bintray.com/kotlin/kotlin-eap-1.1"
        }
        maven {
            url "https://dl.bintray.com/jetbrains/spek/"
        }

    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_gradle_version"
        classpath "org.junit.platform:junit-platform-gradle-plugin:$junit_platform_gradle_plugin_version"
    }
}

group 'com.rsk'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'org.junit.platform.gradle.plugin'

junitPlatform {
    engines {
        include 'spek'
    }
}

sourceCompatibility = 1.8

repositories {
    jcenter()
    maven {
        url "https://dl.bintray.com/kotlin/kotlin-eap-1.1"
    }
    maven {
        url "https://dl.bintray.com/jetbrains/spek/"
    }

}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

    testCompile "org.junit:junit5-api:$junit_version"
    testCompile "org.jetbrains.spek:spek-api:$spek_version"
    testCompile "com.nhaarman:mockito-kotlin:$mokito_kotlin_version"
    testCompile "com.natpryce:hamkrest:$hamkrest_version"

    runtime "org.junit.platform:junit-platform-launcher:$junit_platform_gradle_plugin_version"
    runtime "org.jetbrains.spek:spek-junit-platform-engine:$spek_version"
}
package com.rsk

import com.nhaarman.mockito_kotlin.mock
import com.nhaarman.mockito_kotlin.verify
import org.jetbrains.spek.api.Spek
import org.jetbrains.spek.api.dsl.describe
import org.jetbrains.spek.api.dsl.it
import org.junit.gen5.api.Assertions

class CalculatorSpek : Spek({
    var calculator: Calculator? = null
    describe("the calculator") {
        beforeEach {
            calculator = Calculator(NullResult())
        }

        it("should add two numbers") {
            val result = calculator?.add(12, 13)
            Assertions.assertEquals(25, result)
        }

        it("should accumulate one number") {
            calculator?.accumulate(23)
            Assertions.assertEquals(23, calculator?.total)
        }

        it("should accumulate two numbers") {
            calculator?.accumulate(2)
            calculator?.accumulate(3)
            Assertions.assertEquals(5, calculator?.total)
        }
    }

    describe("the output should be written correctly") {
        val result : Result = mock()
        val calculator = Calculator(result)
        it("should write the output amount") {
            calculator.accumulate(23)
            verify(result).write(23)
        }
    }
})
package com.rsk

class Calculator(val output : Result) {

    var total = 0

    fun add(x: Int, y: Int): Int {
        return x + y
    }

    fun accumulate(x: Int) {
        total += x
        output.write(total)
    }
}

interface Result {
    fun write(answer: Int)
}

class NullResult : Result {
    override fun write(answer: Int) {

    }

}

 

posted @ 2020-10-18 21:38  Zhentiw  阅读(205)  评论(0编辑  收藏  举报