首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个用Kotlin和Spek初始化共享对象的抽象Spek

创建一个用Kotlin和Spek初始化共享对象的抽象Spek
EN

Stack Overflow用户
提问于 2017-09-09 00:33:55
回答 1查看 209关注 0票数 0

我试图用Kotlin + Spek框架编写单元测试。到目前为止,看起来还不错,但是我有一个问题,如果我想要为我测试的一个类有几个Spec对象,我必须编写大量的样板代码。

这是我用来说明问题的代码:

代码语言:javascript
复制
object MyFirstSpec : Spek({
    val myMock1: SomeObject1 = mock()
    val myMock2: SomeObject2 = mock()
    val myMock3: SomeObject3 = mock()
    val myMock4: SomeObject4 = mock()
    val myMock5: SomeObject5 = mock()
    val myMock6: SomeObject6 = mock()

    val myClass = MyClassToTest(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6)

    given("something to test here") {
        //my test here
    }
})

object MyOtherSpec : Spek({
    val myMock1: SomeObject1 = mock()
    val myMock2: SomeObject2 = mock()
    val myMock3: SomeObject3 = mock()
    val myMock4: SomeObject4 = mock()
    val myMock5: SomeObject5 = mock()
    val myMock6: SomeObject6 = mock()

    val myClass = MyClassToTest(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6)

    given("something else to test here") {
        //  my test here
    }
})

我想要创建‘抽象’Spek,在这里我将定义我的模拟等等,然后继承或共享它在我的规范中。

有办法做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-09 17:49:32

不幸的是,我没有找到做出抽象说明或继承的方法,但我找到了使用固定装置来实现预期结果的方法。

下面是我的伪代码,演示它:

代码语言:javascript
复制
object MySpec: Spek({
    describe("my tests with Fixtures") {
        val myMock1: SomeObject1 = mock()
        val myMock2: SomeObject2 = mock()
        val myMock3: SomeObject3 = mock()
        val myMock4: SomeObject4 = mock()
        val myMock5: SomeObject5 = mock()
        val myMock6: SomeObject6 = mock()

        val myClass = MyClassToTest(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6)

        afterEachTest { 
            reset(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6)
            //or we can just clear invocations, if we don't want to reset the mocks
            //clearInvocations(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6)
        }

        context("my first context for testing") {
            //initialization logic here specific for this context
            val somethingSpecificHere = MySpecificLogicObject()
            beforeEachTest { 
                whenever(myMock1.doSomething()).thenReturn(someResult)
            }
            on ("calling the method i'm testing"){
                myClass.myMethod(somethingSpecificHere)

                it ("should do what expected") {
                    //verifies go here
                }
            }
        }
        context("my seconds context for testing") {
            //second context specific code
        }
    }
})

希望这对有同样问题的人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46126119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档