{"id":"8957ba2b-d0e5-4654-af74-1f143b23deb2","shortId":"Js9xuF","kind":"skill","title":"matlab-test-execution","tagline":"Run MATLAB tests, analyze results, collect code coverage, and set up CI/CD pipelines. Use when executing tests, filtering test suites, debugging test failures, generating coverage reports, or configuring buildtool and CI systems for MATLAB projects.","description":"# MATLAB Test Execution\n\n## Must-Follow Rules\n\n- **Execute MATLAB via MCP** — If the MATLAB MCP core server is available, use its `evaluate_matlab_code` tool to run MATLAB commands. Fall back to `matlab -batch` only if the MCP server is not available.\n- **Use buildtool for CI** — When running tests in CI/CD, always use `buildtool` with a `buildfile.m`. Do not use manual `runtests` or `TestRunner` scripts in CI.\n- **Do not guess** — If the test folder location, source folder, or desired output format is unclear, **ask**.\n\n---\n\n## Running Tests\n\n```matlab\nresults = runtests('tests');                          % All tests in a directory\nresults = runtests('myFunctionTest');                  % Specific test file\nresults = runtests('myFunctionTest/testAddition');     % Specific test method\n```\n\n### Filtering\n\n```matlab\nresults = runtests('tests', 'Name', '*Calculator*');   % By name pattern\nresults = runtests('tests', 'Tag', 'Unit');            % By tag\nresults = runtests('tests', 'ExcludeTag', 'Slow');     % Exclude tag\nresults = runtests('tests', 'ProcedureName', 'testX'); % By procedure name\nresults = runtests('tests', 'UseParallel', true);      % Parallel execution\nresults = runtests('tests', 'Strict', true);            % Treat warnings as failures\nresults = runtests('tests', 'Debug', true);             % Enter debugger on failure\nresults = runtests('tests', 'OutputDetail', 'Detailed');% Verbose diagnostics\n```\n\n**Parallel requirements**: Tests must be independent — no shared state, no order dependence, no shared file system artifacts.\n\nFor advanced control (custom plugins, programmatic suite manipulation), use `matlab.unittest.TestRunner` with `testsuite` and `runner.run(suite)`. See the Code Coverage section for an example.\n\n## Analyzing Test Results\n\n```matlab\nresults = runtests('tests');\ndisp(results)\n\nfor r = results([results.Failed])\n    fprintf('\\nFAILED: %s\\n', r.Name);\n    disp(r.Details.DiagnosticRecord.Report);\nend\n\nfor r = results([results.Incomplete])\n    fprintf('\\nINCOMPLETE: %s\\n', r.Name);\n    disp(r.Details.DiagnosticRecord.Report);\nend\n```\n\n---\n\n## Code Coverage\n\nIf code coverage is required (explicitly requested or clearly implied), follow these steps: **Collect and display** → **Identify gaps** (only when user asks to generate tests for missing coverage).\n\n### 1. Collect and Display\n\nRun tests with coverage. Include `CoverageResult` (programmatic) and `CoverageReport` (HTML). Add `CoberturaFormat` for CI. Use the highest `MetricLevel` available — `\"mcdc\"` if \"MATLAB Test\" is installed, otherwise omit it.\n\n```matlab\nimport matlab.unittest.TestRunner\nimport matlab.unittest.plugins.CodeCoveragePlugin\nimport matlab.unittest.plugins.codecoverage.CoverageResult\nimport matlab.unittest.plugins.codecoverage.CoverageReport\n\nrunner = TestRunner.withTextOutput;\ncovFormat = CoverageResult;\nrunner.addPlugin(CodeCoveragePlugin.forFolder('src', ... % use forFile or forNamespace if needed\n    'Producing', [covFormat, CoverageReport('coverage-report')], ...\n    'MetricLevel', 'mcdc'));          % omit MetricLevel if MATLAB Test is unavailable\nresults = runner.run(testsuite('tests'));\n\ncovResults = covFormat.Result;\ndisp(covResults)              % aggregated summary\nfor i = 1:numel(covResults)   % per-file breakdown\n    disp(covResults(i))\nend\n```\n\n### 2. Identify gaps — only when generating tests for missing coverage\n\nRead and run [scripts/printCoverageGaps.m](scripts/printCoverageGaps.m). It expects `covResults` from step 1 and prints uncovered items. Include tiers up to the `MetricLevel` used (the script has comments marking where to cut).\n\n### 3. Act on gaps if requested by the user\n\nUse the uncovered items from step 2 to target test generation. Defer to the MATLAB test generation skill for writing tests.\n\n---\n\n## CI/CD Integration\n\nAlways use `buildtool` with a `buildfile.m` for CI.\n\n### Example buildfile.m\n\n```matlab\nfunction plan = buildfile\n    plan = buildplan(localfunctions);\n\n    plan(\"clean\") = matlab.buildtool.tasks.CleanTask;\n\n    plan(\"check\") = matlab.buildtool.tasks.CodeIssuesTask(\"src\");\n\n    plan(\"test\") = matlab.buildtool.tasks.TestTask(\"tests\", ...\n        SourceFiles = \"src\", ...\n        ReportFormat = [\"html\", \"cobertura\"], ...\n        OutputDirectory = \"reports\");\n\n    plan(\"package\") = matlab.buildtool.tasks.PackageTask(\"toolbox.prj\");\n\n    plan(\"ci\") = matlab.buildtool.Task( ...\n        Description = \"Full CI pipeline\", ...\n        Dependencies = [\"check\", \"test\", \"package\"]);\n\n    plan.DefaultTasks = \"test\";\nend\n```\n\n### Running buildtool\n\n```matlab\nbuildtool              % Run default task\nbuildtool test         % Run specific task\n```\n\n### CI Pipeline Configurations\n\n#### GitHub Actions\n\n```yaml\n# .github/workflows/matlab.yml\nname: MATLAB Tests\non: [push, pull_request]\njobs:\n  test:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: matlab-actions/setup-matlab@v2\n      - uses: matlab-actions/run-build@v2\n```\n\n#### Azure DevOps\n\n```yaml\n# azure-pipelines.yml\ntrigger: [main]\npool:\n  vmImage: 'ubuntu-latest'\nsteps:\n  - task: InstallMATLAB@1\n  - task: RunMATLABBuild@1\n```\n\n#### GitLab CI example\n\n```yaml\n# .gitlab-ci.yml\ntest:\n  image: mathworks/matlab:r2024a\n  script:\n    - matlab -batch \"buildtool\"\n```","tags":["matlab","test","execution","skills","agent-skill","agent-skills","agentic-ai","agents","claude","claude-api","claude-code","claude-desktop"],"capabilities":["skill","source-matlab","skill-matlab-test-execution","topic-agent-skill","topic-agent-skills","topic-agentic-ai","topic-agents","topic-claude","topic-claude-api","topic-claude-code","topic-claude-desktop","topic-claude-skills","topic-matlab","topic-matlab-skills"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/matlab/skills/matlab-test-execution","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add matlab/skills","source_repo":"https://github.com/matlab/skills","install_from":"skills.sh"}},"qualityScore":"0.482","qualityRationale":"deterministic score 0.48 from registry signals: · indexed on github topic:agent-skills · 65 github stars · SKILL.md body (5,261 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T00:55:57.671Z","embedding":null,"createdAt":"2026-04-18T22:14:25.201Z","updatedAt":"2026-04-22T00:55:57.671Z","lastSeenAt":"2026-04-22T00:55:57.671Z","tsv":"'/run-build':579 '/setup-matlab':573 '1':314,395,426,595,598 '2':406,461 '3':446 'act':447 'action':547,572,578 'actions/checkout':567 'add':328 'advanc':229 'aggreg':391 'alway':91,478 'analyz':8,251 'artifact':227 'ask':123,307 'avail':58,81,336 'azur':581 'azure-pipelines.yml':584 'back':70 'batch':73,610 'breakdown':401 'buildfil':491 'buildfile.m':96,483,487 'buildplan':493 'buildtool':33,83,93,480,532,534,538,611 'calcul':153 'check':499,525 'ci':35,85,106,331,485,518,522,543,600 'ci/cd':16,90,476 'clean':496 'clear':294 'cobertura':510 'coberturaformat':329 'code':11,63,245,284,287 'codecoverageplugin.forfolder':360 'collect':10,299,315 'command':68 'comment':441 'configur':32,545 'control':230 'core':55 'coverag':12,29,246,285,288,313,321,372,415 'coverage-report':371 'coveragereport':326,370 'coverageresult':323,358 'covformat':357,369 'covformat.result':388 'covresult':387,390,397,403,423 'custom':231 'cut':445 'debug':25,198 'debugg':201 'default':536 'defer':466 'depend':222,524 'descript':520 'desir':118 'detail':208 'devop':582 'diagnost':210 'directori':134 'disp':258,269,281,389,402 'display':301,317 'end':271,283,405,530 'enter':200 'evalu':61 'exampl':250,486,601 'exclud':169 'excludetag':167 'execut':4,20,42,47,185 'expect':422 'explicit':291 'failur':27,194,203 'fall':69 'file':140,225,400 'filter':22,147 'folder':113,116 'follow':45,296 'forfil':363 'format':120 'fornamespac':365 'fprintf':264,276 'full':521 'function':489 'gap':303,408,449 'generat':28,309,411,465,471 'github':546 'github/workflows/matlab.yml':549 'gitlab':599 'gitlab-ci.yml':603 'guess':109 'highest':334 'html':327,509 'identifi':302,407 'imag':605 'impli':295 'import':347,349,351,353 'includ':322,431 'independ':216 'instal':342 'installmatlab':594 'integr':477 'item':430,458 'job':557 'latest':564,591 'localfunct':494 'locat':114 'main':586 'manipul':235 'manual':100 'mark':442 'mathworks/matlab':606 'matlab':2,6,38,40,48,53,62,67,72,126,148,254,339,346,379,469,488,533,551,571,577,609 'matlab-act':570,576 'matlab-test-execut':1 'matlab.buildtool.task':519 'matlab.buildtool.tasks.cleantask':497 'matlab.buildtool.tasks.codeissuestask':500 'matlab.buildtool.tasks.packagetask':515 'matlab.buildtool.tasks.testtask':504 'matlab.unittest.plugins.codecoverage.coveragereport':354 'matlab.unittest.plugins.codecoverage.coverageresult':352 'matlab.unittest.plugins.codecoverageplugin':350 'matlab.unittest.testrunner':237,348 'mcdc':337,375 'mcp':50,54,77 'method':146 'metriclevel':335,374,377,436 'miss':312,414 'must':44,214 'must-follow':43 'myfunctiontest':137 'myfunctiontest/testaddition':143 'n':267,279 'name':152,155,178,550 'need':367 'nfail':265 'nincomplet':277 'numel':396 'omit':344,376 'order':221 'otherwis':343 'output':119 'outputdetail':207 'outputdirectori':511 'packag':514,527 'parallel':184,211 'pattern':156 'per':399 'per-fil':398 'pipelin':17,523,544 'plan':490,492,495,498,502,513,517 'plan.defaulttasks':528 'plugin':232 'pool':587 'print':428 'procedur':177 'procedurenam':174 'produc':368 'programmat':233,324 'project':39 'pull':555 'push':554 'r':261,273 'r.details.diagnosticrecord.report':270,282 'r.name':268,280 'r2024a':607 'read':416 'report':30,373,512 'reportformat':508 'request':292,451,556 'requir':212,290 'result':9,127,135,141,149,157,164,171,179,186,195,204,253,255,259,262,274,383 'results.failed':263 'results.incomplete':275 'rule':46 'run':5,66,87,124,318,418,531,535,540,560 'runmatlabbuild':597 'runner':355 'runner.addplugin':359 'runner.run':241,384 'runs-on':559 'runtest':101,128,136,142,150,158,165,172,180,187,196,205,256 'script':104,439,608 'scripts/printcoveragegaps.m':419,420 'section':247 'see':243 'server':56,78 'set':14 'share':218,224 'skill':472 'skill-matlab-test-execution' 'slow':168 'sourc':115 'source-matlab' 'sourcefil':506 'specif':138,144,541 'src':361,501,507 'state':219 'step':298,425,460,565,592 'strict':189 'suit':24,234,242 'summari':392 'system':36,226 'tag':160,163,170 'target':463 'task':537,542,593,596 'test':3,7,21,23,26,41,88,112,125,129,131,139,145,151,159,166,173,181,188,197,206,213,252,257,310,319,340,380,386,412,464,470,475,503,505,526,529,539,552,558,604 'testrunn':103 'testrunner.withtextoutput':356 'testsuit':239,385 'testx':175 'tier':432 'tool':64 'toolbox.prj':516 'topic-agent-skill' 'topic-agent-skills' 'topic-agentic-ai' 'topic-agents' 'topic-claude' 'topic-claude-api' 'topic-claude-code' 'topic-claude-desktop' 'topic-claude-skills' 'topic-matlab' 'topic-matlab-skills' 'treat':191 'trigger':585 'true':183,190,199 'ubuntu':563,590 'ubuntu-latest':562,589 'unavail':382 'unclear':122 'uncov':429,457 'unit':161 'use':18,59,82,92,99,236,332,362,437,455,479,566,569,575 'useparallel':182 'user':306,454 'v2':574,580 'v4':568 'verbos':209 'via':49 'vmimag':588 'warn':192 'write':474 'yaml':548,583,602","prices":[{"id":"f4c6232c-9c20-4486-98e7-a0027c34ed93","listingId":"8957ba2b-d0e5-4654-af74-1f143b23deb2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"matlab","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:14:25.201Z"}],"sources":[{"listingId":"8957ba2b-d0e5-4654-af74-1f143b23deb2","source":"github","sourceId":"matlab/skills/matlab-test-execution","sourceUrl":"https://github.com/matlab/skills/tree/main/skills/matlab-test-execution","isPrimary":false,"firstSeenAt":"2026-04-18T22:14:25.201Z","lastSeenAt":"2026-04-22T00:55:57.671Z"}],"details":{"listingId":"8957ba2b-d0e5-4654-af74-1f143b23deb2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"matlab","slug":"matlab-test-execution","github":{"repo":"matlab/skills","stars":65,"topics":["agent-skill","agent-skills","agentic-ai","agents","claude","claude-api","claude-code","claude-desktop","claude-skills","matlab","matlab-skills"],"license":"other","html_url":"https://github.com/matlab/skills","pushed_at":"2026-03-20T00:56:44Z","description":"A collection of Agent Skills for MATLAB development. Skills are specialized instruction sets that extend a coding agent's capabilities for specific tasks, automatically activating when needed.","skill_md_sha":"472059cee18412b85e13a620a0548c96b59c8b07","skill_md_path":"skills/matlab-test-execution/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/matlab/skills/tree/main/skills/matlab-test-execution"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"matlab-test-execution","license":"MathWorks BSD-3-Clause (see LICENSE)","description":"Run MATLAB tests, analyze results, collect code coverage, and set up CI/CD pipelines. Use when executing tests, filtering test suites, debugging test failures, generating coverage reports, or configuring buildtool and CI systems for MATLAB projects."},"skills_sh_url":"https://skills.sh/matlab/skills/matlab-test-execution"},"updatedAt":"2026-04-22T00:55:57.671Z"}}