2017-10-11 81 views
0

我是Kotlin,Mockito的新手。下面的代碼有一個錯誤,這是由engine引起的,這是一個不被模擬的不可變字段。嘲笑Kotlin的最後一場

我花了很多時間試圖解決這個問題。我發現這是一種嘲笑作品的方式,直到我不明白並且不滿足爲止。

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

enter image description here

+0

[如何模擬最終字段? mockito/powermock](https://stackoverflow.com/questions/23629766/how-to-mock-final-field-mockito-powermock) – crgarridos

+0

可能的重複[如何在Android項目中模擬Java模塊上的Mockito 2的最終課程?](https://stackoverflow.com/questions/43306269/how-to-mock-final-class-with-mockito-2-on-java-module-in-android-project) – zsmb13

+0

^這個問題和答案應該幫助你 – zsmb13

回答

0

我想你已經回答了你的問題。沒有其他好的解決方案。你建議的選項(最好是第一個)是正確設計的類,可以測試。