用Kotlin嘲笑最后的场地

时间:2017-10-11 12:05:36

标签: unit-testing mocking mockito kotlin powermock

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

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

  1. 将字段移动到构造函数。 class Car(val engine: Engine) { ... }
  2. 更改为可变字段。 private var engine = Engine()
  3. 还有其他办法吗?

    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)
      }
    }
    

    enter image description here

1 个答案:

答案 0 :(得分:1)

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