Тест JUnit не отправляет значения в качестве параметров функции (Котлин) - PullRequest
0 голосов
/ 30 апреля 2019

Я создаю простой тест 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"))
    }
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

В дополнение к сказанному Беном: класс, который вы хотите проверить, должен быть реальным объектом, а не насмешкой.По умолчанию макет «ничего не делает» и делает только то, что вы делаете, чтобы сказать вам, поэтому тестировать его не имеет смысла.

Что вы высмеиваете, так это зависимости класса, который вы тестируете, то есть объектов, которые вы передаете его конструктору.

Вкратце: если вы хотите проверить CurrencyViewModel, создайте его объект вместо насмешки над ним.

1 голос
/ 30 апреля 2019

Дразнящие классы на самом деле не будут называться. Если вы хотите проверить свой метод currencyViewModel.calculateValue (), создайте реальный объект этого класса и смоделируйте возможные аргументы конструктора.

...