From matlab-skills
Generates class-based MATLAB unit tests using matlab.unittest.TestCase, with assertions, parameters, fixtures, mocks, and tolerances for functions/classes.
npx claudepluginhub matlab/skills --plugin matlab-skillsThis skill uses the workspace's default tool permissions.
Generate robust unit tests using the MATLAB Testing Framework. This skill covers:
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Generate robust unit tests using the MATLAB Testing Framework. This skill covers:
matlab.unittest.TestCase. Never use function-based or script-based tests.Add properties, TestParameter, and setup/teardown blocks as needed.
classdef MyFunctionTest < matlab.unittest.TestCase
methods (Test)
% Individual test methods
end
end
Test.m (e.g., myFunctionTest.m)testAdditionWithPositiveNumbersIdeally, add all test files to a tests/ folder alongside the source
Use Mixed case unless it's a TestParameter. For a TestParameter, use camelCase. Only use properties if local variables won't suffice.
verify* methods (continue on failure) over assert* (stop on failure)verifyError(@() func(args), "errorID") for error testingverifyWarningFree(@() func(args)) for clean executionverifyThat callstestCase.verifyEqual(actual, expected, AbsTol=1e-10);
testCase.verifyEqual(actual, expected, RelTol=1e-6);
if, switch, for, or try/catch in test methods. If a test needs conditionals, split into separate methods.Parameterize only when assertion logic is identical across all cases — only the data varies. Use separate test methods when cases need different assertions, tolerances, setup, or when you'd need conditionals to distinguish them.
For tests involving randomness, seed the RNG and restore it:
methods (TestMethodSetup)
function resetRandomSeed(testCase)
originalRng = rng;
testCase.addTeardown(@() rng(originalRng));
rng(42, "twister");
end
end
Most tests do not need assumptions. Only add assume* when a test absolutely requires specific environment prerequisites that may not be present on all machines:
testCase.assumeTrue(canUseGPU(), "Requires GPU");
Use TestTags attribute (e.g., 'Unit', 'Integration', 'Slow', 'GPU') on methods (Test) blocks for selective execution.
Each test should be able to run independently and be compatible with running tests in parallel.
Use PathFixture to add paths so the tests have access to the source if needed. Use IncludingSubfolders when there are nested packages or subdirectories that also need to be on the path:
methods (TestClassSetup)
function addSourceToPath(testCase)
srcFolder = fullfile(fileparts(fileparts(mfilename('fullpath'))), 'src');
testCase.applyFixture(matlab.unittest.fixtures.PathFixture(srcFolder, ...
IncludingSubfolders=true));
end
end
For more details, if necessary, see references/fixtures.md.
Add additional diagnostics for clarity where the framework diagnostic may be insufficient.
Assess complexity first, then follow the appropriate path.
matlabtest.coder.TestCase / matlabtest.compiler.TestCase.Present a test plan. Do NOT write any test files until the user confirms the plan. A plan may include: list of test methods with names, which behaviors each covers, parameterization strategy, fixtures needed, and edge cases selected
[], '', {})Apply reference card patterns. Write new test files or show diffs for existing files (per Must-Follow Rules).
In many cases, what's present in this file should be sufficient. Do not read the references cards unless the conditions stated in the table are met.
| Load when code under test... | Card |
|---|---|
| Uses setup/teardown, temp files, figures, database connections, shared state, or needs built-in fixtures | references/fixtures.md |
Involves floating-point math needing tolerance selection, constraint objects (verifyThat), or custom constraints | references/constraints.md |
Needs multiple TestParameter properties, dynamic parameters (TestParameterDefinition), or help with cross-product pitfalls | references/parameterized-tests.md |
| Depends on external services, needs mock objects, or requires dependency injection | references/mocking.md |