• [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) {
    
        }
    
    }
  • 相关阅读:
    (七)策略模式详解
    (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
    递归锁,死锁,使用递归锁解决死锁,信号量
    并发编程中的GIL锁(全局解释器锁)自己理解的他为啥存在
    线程了解以及创建线程的Threading模块中的部分方法
    进程 >> 互斥锁、队列与管道、生产者消费者模型
    进程比较基础的内容
    基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程
    网络基础 + 简易服务端和客户端
    单例模式
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13837297.html
Copyright © 2020-2023  润新知