Fakes mostly. The simplest of types (entities) can be used as-is. Any types with any decent complexity conform to an interface which gets swapped for a FakeSoAndSo in tests. After mockative was slow to adopt K2, and I found reverting to Jvm-only tests unacceptable, I just started using Fakes for everything. I had already been using fakes to some degree, but relied on spies for verifying invocations, but now I just verify the expected state of the fake, which makes all properties public.