Skip to content

Instantly share code, notes, and snippets.

@oleksiyp
Last active November 2, 2018 18:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oleksiyp/af968411ebbffd5a8ec3e8b5c2c9e013 to your computer and use it in GitHub Desktop.
Save oleksiyp/af968411ebbffd5a8ec3e8b5c2c9e013 to your computer and use it in GitHub Desktop.
"MockK: intentions" DSL examples
// --- many chained calls ---
val presenter : LoginPresenter = spyk<LoginPresenter>()
val viewCallback = mockk<LoginContract.LoginViewCallBack>()
val cookieStore = mockk<PianoCookieStore>()
val loginRequest = LoginRequest("user", "pwd")
val customerResponse = CustomerResponse("j", "r")
every { presenter.accountDelegator.login(loginRequest) } returns Single.just(Response.success(any()))
every { presenter.accountDelegator.getCustomer() } returns Single.just(customerResponse)
every { presenter.loginViewCallBack } returns viewCallback
every { presenter.cookieStorage } returns cookieStore
presenter.login(loginRequest)
// --- lambda invokation ---
val loadCallback = slot<(List<Note>)->Unit>();
val notesRepo = spyk<INotesRepository>()
val notesView = spyk<INotesListContract.IView>()
every {
notesRepo.getNotes(capture(loadCallback))
} answers {
loadCallback.invoke(FAKE_DATA)
}
val noteList = NotesListPresenter(notesRepo, notesView)
noteList.loadData()
verifySequence {
notesView.showProgress()
notesView.hideProgress()
notesView.displayNotes(FAKE_DATA)
}
// --- concurrent verification with timeout ---
verify(timeout = 100, atMost = 5) { sum(1, 2) }
verify(timeout = 100, exactly = 0) { sum(1, 2) }
verify(timeout = 100, atLeast = 1) { sum(1, 2) }
// --- annotations ---
class CarTest {
@MockK
lateinit var car1: Car
@Before
fun setUp() = MockKAnnotations.init(this)
@Test
fun calculateAddsValues1() {
every { car.drive(Direction.NORTH) } just Runs
}
}
// --- capturing ---
val list = mutableListOf<Double>()
every {
obj.recordTelemetry(
speed = capture(list),
direction = Direction.SOUTH
)
} returns Outcome.RECORDED
// --- default arguments ---
class Mock {
fun fn(a: Int = 1, b: Int = 2, c: Int = 3): Int = a + b + c
}
every { mock.fn(c = less(3)) } returns 5
// same as
every { mock.fn(eq(1), eq(2), less(3)) } returns 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment