[{"data":1,"prerenderedAt":206},["ShallowReactive",2],{"term-m\u002Fmutation-testing":3,"related-m\u002Fmutation-testing":192},{"id":4,"title":5,"acronym":6,"body":7,"category":174,"description":175,"difficulty":176,"extension":177,"letter":178,"meta":179,"navigation":100,"path":180,"related":181,"seo":186,"sitemap":187,"stem":190,"subcategory":6,"__hash__":191},"terms\u002Fterms\u002Fm\u002Fmutation-testing.md","Mutation Testing",null,{"type":8,"value":9,"toc":168},"minimark",[10,15,19,23,26,30,157,161,164],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"Mutation testing is a way to test your tests. A tool secretly changes (mutates) your code — like flipping a > to >= or removing a return — and checks if your tests catch it. If your tests don't notice the code changed, your tests are weak. Devious but brilliant.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Mutation testing evaluates test quality by introducing small code changes (mutants) and checking whether tests catch them. A surviving mutant means tests are missing coverage. Tools like Stryker (JS) or PIT (Java) generate mutants and report a mutation score (percentage killed).",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Original code\nfunction isAdult(age) { return age >= 18; }\n\n\u002F\u002F Mutant generated:\nfunction isAdult(age) { return age > 18; } \u002F\u002F changed >= to >\n\n\u002F\u002F If your tests don't catch this, they're weak!\n\u002F\u002F A test with age=18 would catch it.\n","javascript","",[38,39,40,49,95,102,108,140,145,151],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Original code\n",[41,50,52,56,60,64,68,71,74,78,82,85,89,92],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","function",[41,57,59],{"class":58},"s2Zo4"," isAdult",[41,61,63],{"class":62},"sMK4o","(",[41,65,67],{"class":66},"sHdIc","age",[41,69,70],{"class":62},")",[41,72,73],{"class":62}," {",[41,75,77],{"class":76},"s7zQu"," return",[41,79,81],{"class":80},"sTEyZ"," age",[41,83,84],{"class":62}," >=",[41,86,88],{"class":87},"sbssI"," 18",[41,90,91],{"class":62},";",[41,93,94],{"class":62}," }\n",[41,96,98],{"class":43,"line":97},3,[41,99,101],{"emptyLinePlaceholder":100},true,"\n",[41,103,105],{"class":43,"line":104},4,[41,106,107],{"class":47},"\u002F\u002F Mutant generated:\n",[41,109,111,113,115,117,119,121,123,125,127,130,132,134,137],{"class":43,"line":110},5,[41,112,55],{"class":54},[41,114,59],{"class":58},[41,116,63],{"class":62},[41,118,67],{"class":66},[41,120,70],{"class":62},[41,122,73],{"class":62},[41,124,77],{"class":76},[41,126,81],{"class":80},[41,128,129],{"class":62}," >",[41,131,88],{"class":87},[41,133,91],{"class":62},[41,135,136],{"class":62}," }",[41,138,139],{"class":47}," \u002F\u002F changed >= to >\n",[41,141,143],{"class":43,"line":142},6,[41,144,101],{"emptyLinePlaceholder":100},[41,146,148],{"class":43,"line":147},7,[41,149,150],{"class":47},"\u002F\u002F If your tests don't catch this, they're weak!\n",[41,152,154],{"class":43,"line":153},8,[41,155,156],{"class":47},"\u002F\u002F A test with age=18 would catch it.\n",[11,158,160],{"id":159},"when-youll-hear-this","When You'll Hear This",[16,162,163],{},"\"Our mutation score is only 40% — we need better tests, not just more coverage.\" \u002F \"Mutation testing found that our age validation tests didn't cover the boundary value.\"",[165,166,167],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":51,"depth":51,"links":169},[170,171,172,173],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":159,"depth":51,"text":160},"testing","Mutation testing is a way to test your tests.","advanced","md","m",{},"\u002Fterms\u002Fm\u002Fmutation-testing",[182,183,184,185],"Coverage","Code Coverage","Unit Test","Property-Based Testing",{"title":5,"description":175},{"changefreq":188,"priority":189},"weekly",0.7,"terms\u002Fm\u002Fmutation-testing","Vm0jaLZIv2Uzh5lg9E4FXZ8jtZe6OGJ7XlskdNtnUyU",[193,197,200,203],{"title":183,"path":194,"acronym":6,"category":174,"difficulty":195,"description":196},"\u002Fterms\u002Fc\u002Fcode-coverage","beginner","Code coverage is the report card for your tests. It shows you a map of your code and highlights which lines got tested (green) and which didn't (red).",{"title":182,"path":198,"acronym":6,"category":174,"difficulty":195,"description":199},"\u002Fterms\u002Fc\u002Fcoverage","Coverage tells you what percentage of your code is actually tested. 80% coverage means 80% of your lines are touched by at least one test.",{"title":185,"path":201,"acronym":6,"category":174,"difficulty":176,"description":202},"\u002Fterms\u002Fp\u002Fproperty-based-testing","Instead of writing specific test cases (add(2,3)=5), property-based testing generates thousands of random inputs automatically and checks that certain prop...",{"title":184,"path":204,"acronym":6,"category":174,"difficulty":195,"description":205},"\u002Fterms\u002Fu\u002Funit-test","A unit test is like checking that one single LEGO brick isn't broken before you use it in your big castle.",1776518296614]