Sw-spec/unit-test-and-mock

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา

Links

Codes

CounterView.kt

interface CounterView {
    fun setCounter(value: Int)
}

CounterPresenter.kt

class CounterPresenter(val view: CounterView) {
    var counter: Int = 0

    fun onPlusButtonClicked() {
        counter++
        updateCounterInView()
    }
    fun onMinusButtonClicked() {
        counter--
        updateCounterInView()
    }
    fun onResetButtonClicked() {
        reset()
    }
    fun start() {
        reset()
    }

    private fun reset() {
        counter = 0
        updateCounterInView()
    }

    private fun updateCounterInView() {
        view.setCounter(counter)
    }
}

CounterPresenterTest.kt

import org.junit.Before
import org.junit.Test
import org.mockito.Mockito.*

/**
 * Created by jittat on 23/3/2561.
 */
class CounterPresenterTest {
    lateinit var view: CounterView
    lateinit var presenter: CounterPresenter

    @Before
    fun init() {
        view = mock(CounterView::class.java)
        presenter = CounterPresenter(view)
    }

    @Test
    fun testResetCounter() {
        presenter.start()
        verify(view).setCounter(0)
    }

    @Test
    fun testAddCounter() {
        presenter.start()
        presenter.onPlusButtonClicked()

        val inOrder = inOrder(view)
        inOrder.verify(view).setCounter(0)
        inOrder.verify(view).setCounter(1)
    }
}