Gopalkrishna Mudaliar
Gopalkrishna Mudaliar

Reputation: 21

Mockk AssertionError: Verification failed: call 1 of 1

///Here is my class

class State {
    var state: Int = 10
}

open class Car {
    var state:State = State()
    fun changState(data: Int = 1) {
         setState(data)
    }
    fun setState(data: Int = 0) {
        state.state = data
    }
}

/// Here is my Test

 @Test
    fun `test 1`() {

        var mockCar = mockk<Car>()

        every { mockCar.changState(any()) } just runs
        every { mockCar.setState(any()) } just runs

        mockCar.changState(10)

        verify(exactly = 1) { mockCar.changState(any()) }
        verify { mockCar.setState(any()) }
    }

But it fails with this error

################################

java.lang.AssertionError: Verification failed: call 1 of 1: Car(#1).setState(any())) was not called.

Calls to same mock:

  1. Car(#1).changState(10)

############################

Upvotes: 1

Views: 6011

Answers (1)

thinkgruen
thinkgruen

Reputation: 1

You need to remove verify { mockCar.setState(any()) } - there is no way that this will ever be called, because you mocked

every { mockCar.changState(any()) } just runs

This means the stubbed method will do nothing, it just runs, so to speak.

I don't recommend writing tests that only test mocks, because it will lead to a bias that the code is fine when you just use outputs of what you think is correct behavior. Instead, write a separate unit test for Car.

For your use-case a mock is not the intended thing to use, you should be using a spy instead if you mix real method calls with mocked behavior.

Upvotes: 3

Related Questions