簡體   English   中英

JUnit測試未將值作為參數發送給函數(Kotlin)

[英]JUnit test not sending values as parameters to function (Kotlin)

我正在創建一個簡單的junit測試來測試視圖模型中的函數,但是第一個斷言失敗,因為我調用的函數返回null。 當我調試函數時,我調用的函數具有空參數,這很奇怪,因為我將它們傳入了。

我花了很多時間進行調試和搜索,以找出出現此問題的原因,但沒有發現任何可以解決我的問題或告訴我問題是什么的信息。

@RunWith(MockitoJUnitRunner::class)
class CurrencyUnitTest {

    @Rule
    @JvmField
    val rule = InstantTaskExecutorRule()

    @Mock
    val currencyViewModel : CurrencyViewModel = mock(CurrencyViewModel::class.java)

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)

        val rates: HashMap<String, Double> =
                hashMapOf(
                    "USD" to 1.323234,
                    "GBP" to 2.392394,
                    "AUD" to 0.328429,
                    "KWR" to 893.4833
                )

        val currencyRates = MutableLiveData<Resource<CurrencyRatesData?>>()
        val resource = Resource<CurrencyRatesData?>(Status.SUCCESS, CurrencyRatesData("CAD", rates, 0))
        currencyRates.value = resource

        `when`(currencyViewModel.currencyRatesData).thenReturn(currencyRates)

        val baseCurrency = MutableLiveData<String>()
        baseCurrency.value = "CAD"

        `when`(currencyViewModel.baseCurrency).thenReturn(baseCurrency)
    }

    @Test
    fun calculateValueTest() {
        // this fails
        assertEquals("0.36", currencyViewModel.calculateValue("AUD", "1.11"))
    }
}

模擬類不會真正被調用。 如果要測試currencyViewModel.calculateValue()方法,請創建該類的真實對象並模擬可能的構造函數參數。

補充一下Ben所說的:要測試的類必須是真實的對象,而不是模擬對象。 默認情況下,模擬程序“不執行任何操作”,並且只會執行您要告訴您的操作,因此對其進行測試沒有任何意義。

模擬的是您測試的類的依賴關系,即您傳遞給其構造函數的對象。

簡而言之:如果要測試CurrencyViewModel ,請為其創建一個對象,而不是對其進行模擬。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM