【问题标题】:Mocking final field with Kotlin用 Kotlin 模拟 final 字段
【发布时间】:2017-10-11 12:05:36
【问题描述】:

我是 Kotlin 的新手,Mockito。下面的代码有一个由engine 引起的错误,这是一个未被模拟的不可变字段。

我花了很多时间试图解决这个问题。我发现一种嘲弄的方式是可行的,直到我不理解也不满足为止。

  1. 将字段移至构造函数。 class Car(val engine: Engine) { ... }
  2. 更改为可变字段。 private var engine = Engine()

还有其他方法吗?

class Car {

  private val engine = Engine() // here
  var state: String? = null

  fun move() {
    state = engine.state
  }
}

@RunWith(MockitoJUnitRunner::class)
class CarTest {

  @Mock private lateinit var mockedEngine: Engine

  @InjectMocks private val car = Car()

  @Test
  fun test() {
    `when`.(mockedEngine.state).thenReturn("run")
    car.move()
    assertEquals("run", car.state)
  }
}

【问题讨论】:

标签: unit-testing mocking mockito kotlin powermock


【解决方案1】:

我想你已经回答了你的问题。没有其他好的解决方案。您建议的选项(最好是第一个)是经过适当设计的可测试类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2012-06-28
    相关资源
    最近更新 更多