我试图用Kotlin + Spek框架编写单元测试。到目前为止,看起来还不错,但是我有一个问题,如果我想要为我测试的一个类有几个Spec对象,我必须编写大量的样板代码。
这是我用来说明问题的代码:
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,在这里我将定义我的模拟等等,然后继承或共享它在我的规范中。
有办法做到这一点吗?
发布于 2017-09-09 17:49:32
不幸的是,我没有找到做出抽象说明或继承的方法,但我找到了使用固定装置来实现预期结果的方法。
下面是我的伪代码,演示它:
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
}
}
})希望这对有同样问题的人有帮助。
https://stackoverflow.com/questions/46126119
复制相似问题