Kotlin Spek中的组执行顺序是错误的
这是我的测试:
object MySpek : Spek({ val myMock1: MyMock1 = mock() val myMock2: MyMock2 = mock() val handler = StartModeHandler(myMock1, myMock2) val session = mock<Session> { on { user }.doReturn(User.builder().withUserId("userId").build()) } describe("item exists for user") { beforeGroup { reset(digitalPointDao, trackDao) } whenever(myMock1.loadItem(session.user.userId)).thenReturn(Optional.of(MyItem())) whenever(myMock2.loadSomething()).thenReturn(ArrayList()) context("method onLaunch was called") { val response = handler.onLaunch(session) it("should return the response for existing user") { //some asserts here } it("should save the item") { //some mock verifies here } } } })
根据Spek的文档,我期望的流程如下:
- 初始化之前的所有内容
- 在组之前打电话
- 描述身体,例如我每当呼吁嘲笑
- 运行上下文
- 运行它的每个方法
但是我得到以下流程:
- 初始化之前的所有内容
- 运行我的描述机构,比如我每次打电话给模拟
- 运行上下文
- 在组之前运行
- 运行它的每个方法
我错过了什么,在这里做错了什么?
正如Spek文档中提到的组范围(给定,描述,上下文)将会急切地执行其中的任何代码。 任何测试状态初始化应该在灯具内完成(beforeEachTest,beforeGroup等)。 您也可以使用memoized
来创建与Spek生命周期相关的依赖项。
object MySpek: Spek({ val myMock1 by memoized { mock<myMock1>() } val myMock2 by memoized { mock<myMock2>() } val handler by memoized { StartModeHandler(myMock1, myMock2) } val session by memoized { mock<Session> { on { user }.doReturn(User.builder().withUserId("userId").build()) } } describe("item exists for user") { beforeEachTest { reset(digitalPointDao, trackDao) whenever(myMock1.loadItem(session.user.userId)).thenReturn(Optional.of(MyItem())) whenever(myMock2.loadSomething()).thenReturn(ArrayList()) } // use on instead of context on("method onLaunch was called") { val response = handler.onLaunch(session) it("should return the response for existing user") { //some asserts here } it("should save the item") { //some mock verifies here } } } })
- 如何使用PowerMock模拟Kotlin类(最终)?
- Android Studio 3 / Kotlin代码覆盖
- 如何使用Mockito Kotlin片段/活动来模拟kotlinx.android.synthetic的意见
- 用JMockit和Kotlin捕获对象
- 运行多个测试(Kotlin)时,只有第一个测试通过TestScheduler,
- Robolectric与AppCompat Library不兼容的AlertDialog问题
- Kapt generatestubs – 不能用单元测试的内部构造函数初始化对象
- Kotlin + Mockito2:演示者测试的ClassNotFoundException
- 如何管理Kotlin中的单元测试资源,如启动/停止数据库连接或嵌入式elasticsearch服务器?