Quality Test Pilot
nekomangaorg/Neko
Writes high-quality unit tests for Kotlin Android codebases to increase meaningful test coverage.
A skill your agent uses to wire MockK (the Kotlin-first mocking framework) into a JVM unit-test suite, especially when coroutines, singleton/object mocking, or constructor mocking dominate.
$ npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install skydoves/android-testing-skills mocking-with-mockk --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/jvm-tests/mocking/mocking-with-mockk .claude/skills/mocking-with-mockk && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "mocking-with-mockk" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/jvm-tests/mocking/mocking-with-mockk into .claude/skills/mocking-with-mockk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mocking-with-mockk", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/skydoves/android-testing-skills/tree/main/jvm-tests/mocking/mocking-with-mockkType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install skydoves/android-testing-skills mocking-with-mockk --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/jvm-tests/mocking/mocking-with-mockk .agents/skills/mocking-with-mockk && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "mocking-with-mockk" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/jvm-tests/mocking/mocking-with-mockk into .agents/skills/mocking-with-mockk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mocking-with-mockk", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install skydoves/android-testing-skills mocking-with-mockk --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/jvm-tests/mocking/mocking-with-mockk .cursor/skills/mocking-with-mockk && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "mocking-with-mockk" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/jvm-tests/mocking/mocking-with-mockk into .cursor/skills/mocking-with-mockk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mocking-with-mockk", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/skydoves/android-testing-skills.git --path jvm-tests/mocking/mocking-with-mockk--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install skydoves/android-testing-skills mocking-with-mockk --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/jvm-tests/mocking/mocking-with-mockk .gemini/skills/mocking-with-mockk && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "mocking-with-mockk" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/jvm-tests/mocking/mocking-with-mockk into .gemini/skills/mocking-with-mockk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mocking-with-mockk", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install skydoves/android-testing-skills mocking-with-mockkInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/jvm-tests/mocking/mocking-with-mockk .github/skills/mocking-with-mockk && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "mocking-with-mockk" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/jvm-tests/mocking/mocking-with-mockk into .github/skills/mocking-with-mockk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mocking-with-mockk", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install skydoves/android-testing-skills mocking-with-mockk --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/jvm-tests/mocking/mocking-with-mockk .opencode/skills/mocking-with-mockk && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "mocking-with-mockk" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/jvm-tests/mocking/mocking-with-mockk into .opencode/skills/mocking-with-mockk/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mocking-with-mockk", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
mocking-with-mockkA skill your agent uses to wire MockK (the Kotlin-first mocking framework) into a JVM unit-test suite, especially when coroutines, singleton/object mocking, or constructor mocking dominate.
Mocking With Mockk is an agent skill from skydoves/android-testing-skills. Use this skill to wire MockK (the Kotlin-first mocking framework) into a JVM unit-test suite, especially when coroutines, singleton/object mocking, or constructor mocking dominate. Covers io.mockk:mockk-jvm:1.14.x (and mockk-android + mockk-agent for instrumented), every { } returns, coEvery / coVerify (native suspend support — the big win over Mockito), mockk(relaxed = true) / relaxUnitFun = true, slot<T() capture, verifySequence / verifyOrder / confirmVerified, mockkStatic / mockkObject / mockkConstructor with…
Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Unit testing and Android development. It works with Kotlin and Android. The repository describes itself as: ⚡️ A set of skills for Android testing: Compose UI, AndroidX Test, JVM unit tests, and ADB. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 8665ed5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are kotlin).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
mockk.iodeveloper.android.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Mocking With Mockk loads about 4.1k tokens when it runs. Until then it costs about 224 tokens; SKILL.md has 1,126 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from skydoves/android-testing-skills at commit 8665ed5, republished under its Apache-2.0 licence (© skydoves). 1,126 words, ~4,149 tokens.
.claude/skills/mocking-with-mockk/SKILL.md (or your agent's skills folder).MockK is the Kotlin-first alternative to Mockito. Its headline wins are native suspend support (coEvery / coVerify with no runBlocking dance), first-class singleton / object / static / constructor mocking, and Kotlin-native syntax (every { … } returns x). The trade-off: androidx itself does NOT use MockK (a grep -r "io.mockk" over the AOSP checkout returns zero hits — see ../mocking-with-mockito/SKILL.md for the dominant pattern). New Kotlin code outside Google often picks MockK; new Kotlin code inside Google or matching AOSP conventions picks Mockito. Both are valid.
object (singleton), companion object, top-level function (Kt-suffixed file), or every newly-constructed instance of a class.relaxed = true / relaxUnitFun = true.slot<T>() capture with slot.captured (cleaner than Mockito's ArgumentCaptor).viewModelScope, Flow collectors, LaunchedEffect-style suspend collaborators.../mocking-with-mockito/SKILL.md. Do not migrate without a reason — both frameworks are valid.../mocking-with-mockito/SKILL.md.Repository with caching logic — write a fake instead. See ../../../fundamentals/doubles/picking-test-doubles/SKILL.md (Google explicitly prefers fakes per /test-doubles).../../runner/configuring-junit4-on-android/SKILL.md.Flow emissions over time — pair MockK with Turbine. See ../../coroutines/testing-flows-with-turbine/SKILL.md.runTest semantics — see ../../coroutines/testing-coroutines-with-runtest/SKILL.md.../../runner/configuring-junit4-on-android/SKILL.md is already in place.MainDispatcherRule is installed if any code-under-test touches Dispatchers.Main — see the runner skill.dependencies {
// JVM unit tests (src/test/)
testImplementation("io.mockk:mockk-jvm:1.14.0")
// Instrumented tests (src/androidTest/) — different artifact + agent
androidTestImplementation("io.mockk:mockk-android:1.14.0")
androidTestImplementation("io.mockk:mockk-agent:1.14.0")
}mockk-android swaps the bytecode-generation backend so MockK runs inside Dalvik/ART where stock ByteBuddy doesn't work. Use mockk-jvm (NOT mockk-android) for src/test/ Robolectric tests — Robolectric runs on the JVM.
MockKAnnotations.init(this) or direct mockk<T>() construction. The annotation route reads cleaner for tests with many mocks; direct construction wins for one-off mocks:import io.mockk.MockKAnnotations
import io.mockk.impl.annotations.MockK
import io.mockk.impl.annotations.RelaxedMockK
import io.mockk.impl.annotations.SpyK
import io.mockk.impl.annotations.InjectMockKs
@RunWith(AndroidJUnit4::class)
class UserViewModelTest {
@get:Rule val mainDispatcherRule = MainDispatcherRule()
@MockK lateinit var repo: UserRepository
@RelaxedMockK lateinit var logger: Logger
@SpyK var realClock: Clock = SystemClock()
@InjectMockKs lateinit var subject: UserViewModel
@Before fun setUp() = MockKAnnotations.init(this, relaxUnitFun = true)
@After fun tearDown() = unmockkAll() // see step 5 — cleanup global hooks
}MockKAnnotations.init does not itself install global hooks (mockkStatic / mockkObject / mockkConstructor); but if the test class adds any of those, the @After unmockkAll() is needed to prevent leakage into sibling tests. JUnit5's MockKExtension does this automatically — JUnit4 does not.
Direct construction:
val car = mockk<Car>(
name = "carA",
relaxed = false,
relaxUnitFun = true, // Unit-returning calls auto-relax; reference returns still throw
moreInterfaces = arrayOf(Comparable::class),
)every { … } returns … for plain functions and coEvery { … } returns … for suspend. This is the headline ergonomic win over Mockito — no runBlocking { whenever(...) } wrap is needed for suspend stubs:import io.mockk.coEvery
import io.mockk.coVerify
import io.mockk.every
import io.mockk.verify
every { car.drive(Direction.NORTH) } returns Outcome.OK
every { car.brake() } throws IllegalStateException("frozen")
every { car.gear } returnsMany listOf(1, 2, 3) // sequence
every { car.compute(any()) } answers { firstArg<Int>() * 2 }
// Suspend — the big win:
coEvery { repo.fetchUser(1) } returns User("Jane")
coEvery { repo.observeUser(1) } returns flowOf(User("Jane"))verify { … }, coVerify { … }, and the strict variants. MockK's verifiers are richer than Mockito's:verify { car.drive(Direction.NORTH) }
verify(exactly = 2) { car.drive(any()) }
verify(exactly = 0) { car.brake() } // = never
verify(atLeast = 1, atMost = 3) { car.drive(any()) }
verifyAll { /* must list every interaction — exhaustive, unordered */ }
verifySequence { /* every interaction in this exact order */ }
verifyOrder { /* listed interactions occurred in this order, others may also have happened */ }
coVerify(exactly = 1) { repo.fetchUser(1) }
confirmVerified(car) // strict: nothing else was invokedconfirmVerified is the safety net to catch silent extra interactions — pair it with verifyAll/verifySequence for a fully constrained test.
slot<T>(). Cleaner than Mockito's captor — slot.captured is a property:import io.mockk.slot
val slot = slot<User>()
every { repo.save(capture(slot)) } returns Unit
subject.register(User("Jane"))
assertEquals("Jane", slot.captured.name)
// Multiple captures over a sequence of calls:
val users = mutableListOf<User>()
every { repo.save(capture(users)) } returns Unit
// ... many calls ...
assertEquals(3, users.size) 6. Use relaxed = true or relaxUnitFun = true deliberately. MockK is strict by default — any unstubbed call throws MockKException. The two relaxation modes:
relaxed = true — every unstubbed call returns a type-default value (0, false, empty string, nested mock for reference types). Cuts boilerplate but hides bugs.relaxUnitFun = true — only Unit-returning calls auto-relax; reference returns still throw. Recommended middle ground for logger / metrics / framework-callback collaborators.val logger = mockk<Logger>(relaxed = true) // any call -> default
logger.info("anything") // no every{} needed
val n = logger.lineCount // returns 0
val analytics = mockk<Analytics>(relaxUnitFun = true) // safer middle ground
analytics.track(Event("foo")) // OK — Unit return is relaxed
analytics.session // throws — reference return needs every{}mockkObject / mockkStatic / mockkConstructor — and ALWAYS clean up. These install GLOBAL hooks that persist beyond the current test unless explicitly unmocked. Leakage across tests is the #1 MockK footgun.import io.mockk.mockkObject
import io.mockk.mockkStatic
import io.mockk.mockkConstructor
import io.mockk.unmockkAll
@After fun tearDown() = unmockkAll() // belt-and-braces cleanup
@Test fun mocksObject() {
mockkObject(MySingleton)
every { MySingleton.flag } returns true
// ... assertions ...
}
@Test fun mocksTopLevel() {
// Kotlin top-level functions compile as static methods on the file's *Kt class.
mockkStatic("com.example.UtilsKt")
every { hashSomething(any()) } returns "deadbeef"
}
@Test fun mocksJavaStatic() {
mockkStatic(System::class)
every { System.currentTimeMillis() } returns 0L
}
@Test fun mocksConstructor() {
mockkConstructor(OkHttpClient::class)
every { anyConstructed<OkHttpClient>().newCall(any()) } returns fakeCall
}The JUnit5 MockKExtension auto-cleans, but JUnit4 tests must call unmockkAll() in @After.
./gradlew :<module>:testDebugUnitTest --tests <YourTestClass>. A passing test that uses verifyAll / verifySequence / confirmVerified on a strict mock means every interaction is accounted for. If MockK throws MockKException: no answer found for: …, the SUT is calling something the test didn't stub — either stub it, relax the mock, or fix the SUT.// WRONG
every { mock.suspendFn() } returns x
// WRONG because: every { } produces a non-suspend stub. At call time MockK throws
// MockKException because the actual call carries a Continuation argument that
// every {} did not match against. This is the #1 trip-up when migrating from Mockito.// RIGHT
coEvery { mock.suspendFn() } returns x
coVerify { mock.suspendFn() }// WRONG
@Test fun firstTest() {
mockkStatic(System::class)
every { System.currentTimeMillis() } returns 0L
// ... assertions ...
// No unmockkStatic, no unmockkAll, no JUnit5 extension.
}
@Test fun secondTest() {
// System.currentTimeMillis() is STILL mocked from firstTest. Bizarre failures
// depending on test ordering follow.
}
// WRONG because: mockkStatic / mockkObject / mockkConstructor install global hooks.
// JUnit4 does not auto-clean MockK state.// RIGHT — JUnit4 with explicit teardown
@After fun tearDown() = unmockkAll()
@Test fun firstTest() {
mockkStatic(System::class)
every { System.currentTimeMillis() } returns 0L
// ...
}
// secondTest now starts with a clean slate.// WRONG
val service = mockk<PaymentService>(relaxed = true)
service.charge(amount = 100, account = "acct-7")
// Test passes because charge() silently returns a relaxed default. No verify call,
// no every{} stub. The intended interaction was never asserted, and a behaviour
// regression would not surface here.// RIGHT
val service = mockk<PaymentService>() // strict
every { service.charge(any(), any()) } returns ChargeResult.OK
service.charge(amount = 100, account = "acct-7")
verify(exactly = 1) { service.charge(eq(100), eq("acct-7")) }
confirmVerified(service)relaxed = true is appropriate for loggers / metrics where the test really doesn't care about return values. For domain services, prefer the default strict mode plus explicit every / verify.
coEvery { … } returns … (NOT every { … } returns …) when stubbing a suspend function. MUST use coVerify { … } (NOT verify { … }) when verifying a suspend call.io.mockk:mockk-jvm for src/test/ and io.mockk:mockk-android + io.mockk:mockk-agent for src/androidTest/. Mixing the artifacts crashes the agent.unmockkAll() in an @After method whenever a JUnit4 test uses mockkObject, mockkStatic, or mockkConstructor. Leakage across tests is the #1 MockK footgun.relaxUnitFun = true over relaxed = true when in doubt. The middle ground hides far fewer bugs.MockKAnnotations.init(this, relaxUnitFun = …) in @Before when using @MockK / @RelaxedMockK / @SpyK / @InjectMockKs. Without it, the lateinit fields never initialise.MockKExtension over manual cleanup when the project is on JUnit 5 — it handles teardown of static / object mocks automatically.inline functions or inline class (value classes) — MockK cannot intercept them. Wrap or refactor instead.mockkStatic for production-code time access (System.currentTimeMillis, Clock.system). Inject a Clock abstraction instead — production code is testable without bytecode rewriting.verifySequence (or verifyAll) with confirmVerified(mock) for a fully constrained test that fails if any unexpected interaction occurs../gradlew :<module>:testDebugUnitTest --tests <YourTestClass> passes.every { mock.<suspend-fn>() } returns ... triggers MockKException("no answer found") at runtime — let your test failures, not a grep, surface this. (A grep on common suspend-fn name fragments produces too many false positives — loadConfig, fetchSync, observeForever are typically not suspending.)mockkStatic / mockkObject / mockkConstructor has either @After fun tearDown() = unmockkAll() or extends MockKExtension (JUnit5).io.mockk.* and org.mockito.* — pick one framework per module.@MockK / @RelaxedMockK / @SpyK / @InjectMockKs fields are paired with a @Before method calling MockKAnnotations.init(this, ...).mockkStatic(System::class) for time — a Clock abstraction is injected instead.MockKException: no answer found for: … when the SUT runs.../mocking-with-mockito/SKILL.md — androidx itself uses Mockito exclusively (400+ files import org.mockito, zero import io.mockk).coEvery, see ../../coroutines/testing-coroutines-with-runtest/SKILL.md.Flow emissions, see ../../coroutines/testing-flows-with-turbine/SKILL.md.© skydoves, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in jvm-tests/mocking/mocking-with-mockk of skydoves/android-testing-skills.
Open the folder on GitHubat commit 8665ed5
Mocking With Mockk next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Mocking With Mockk this skillskydoves/android-testing-skills | 333 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| Quality Test Pilotnekomangaorg/Neko | 2.8k | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Improve Code Coveragealexvanyo/composelife | 267 | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Android Testingrcosteira79/android-skills | 151 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Pos Testswoocommerce/woocommerce-android | 319 | — | ~216 | Automated safety check: Notes | GPL-2.0 | |
| Store Testswoocommerce/woocommerce-android | 319 | — | ~239 | Automated safety check: Notes | GPL-2.0 |
nekomangaorg/Neko
Writes high-quality unit tests for Kotlin Android codebases to increase meaningful test coverage.
alexvanyo/composelife
Helps increment code coverage in this Kotlin Multiplatform project.
rcosteira79/android-skills
A skill your agent uses when writing, fixing, or refactoring Android/KMP code in Kotlin — a test-first (RED-GREEN-REFACTOR) foundation plus the Android/KMP test traps: Compose-test dispatching…
woocommerce/woocommerce-android
POS unit testing patterns (WooPosCoroutineTestRule, runTest, advanceUntilIdle, mockito-kotlin, event bus mocking, analytics verification).
woocommerce/woocommerce-android
Main app unit testing patterns (BaseUnitTest, BDD naming, mockito-kotlin, AssertJ, StateFlow/LiveData capture, coroutine dispatchers).
hyochan/react-native-nitro-sound
Build and run device-backed Android end-to-end checks for react-native-nitro-sound permissions, recording, playback, listeners, pause/resume, seek, speed, audio focus, lifecycle behavior, and rapid…
skydoves/android-testing-skills
A skill your agent uses to verify Compose layout measurements from a UI test using assertWidthIsEqualTo, assertHeightIsEqualTo, assertWidthIsAtLeast, assertHeightIsAtLeast…
skydoves/android-testing-skills
A skill your agent uses to verify a Compose semantics node's properties from a UI test using assertExists, assertDoesNotExist, assertIsDisplayed, assertIsNotDisplayed, assertIsDeactivated…
skydoves/android-testing-skills
A skill your agent uses to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI.
skydoves/android-testing-skills
A skill your agent uses to capture visual artefacts from a device for test failures, golden image generation, QA repro, and demo videos.
skydoves/android-testing-skills
A skill your agent uses to pick the correct Compose UI test entry point.
skydoves/android-testing-skills
A skill your agent uses to pick which behaviors to cover in an Android test suite using Google's five-category state vocabulary plus the explicit "what NOT to test" list from…
Categories
A skill your agent uses to wire MockK (the Kotlin-first mocking framework) into a JVM unit-test suite, especially when coroutines, singleton/object mocking, or constructor mocking dominate. Mocking With Mockk is an agent skill from skydoves/android-testing-skills. Use this skill to wire MockK (the Kotlin-first mocking framework) into a JVM unit-test suite, especially when coroutines, singleton/object mocking, or constructor mocking dominate.
Mocking With Mockk fits situations like: wire MockK (the Kotlin-first mocking framework) into a JVM unit-test suite; especially when coroutines; singleton/object mocking; constructor mocking dominate.
Run `npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a claude-code`. Or copy the skill folder (jvm-tests/mocking/mocking-with-mockk in skydoves/android-testing-skills) into .claude/skills/mocking-with-mockk in your project. Claude Code loads it when a task matches its description.
Run `npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a codex`. Or copy the skill folder (jvm-tests/mocking/mocking-with-mockk in skydoves/android-testing-skills) into .agents/skills/mocking-with-mockk in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add skydoves/android-testing-skills --skill mocking-with-mockk -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mocking-with-mockk, .gemini/skills/mocking-with-mockk, .github/skills/mocking-with-mockk and .opencode/skills/mocking-with-mockk in your project.
SKILL.md names no scripts, command-line tools or credentials: Mocking With Mockk is instructions for the agent only.
SKILL.md names 2 domains. As links in the text: mockk.io and developer.android.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Mocking With Mockk is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.1k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Mocking With Mockk: Quality Test Pilot (nekomangaorg/Neko, 2.8k stars), Improve Code Coverage (alexvanyo/composelife, 267 stars), Android Testing (rcosteira79/android-skills, 151 stars) and Pos Tests (woocommerce/woocommerce-android, 319 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
skydoves (a GitHub user) maintains it in skydoves/android-testing-skills, which has 333 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on May 25, 2026.
Source: skydoves/android-testing-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.