PageSourceSearch

https://xtrem-tdd.netlify.app/assets/js/23404e58.d723ee27.js

js xtrem-tdd.netlify.app collected 2026-10-03 11:38:38 UTC 43,707 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkxtrem_tdd=self.webpackChunkxtrem_tdd||[]).push([[976],{6300:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var i=n(7624),s=n(2172);const a={categories:["Testing"],authors:["Valentina Cupa\u0107","Guilaume Faas"],problems:["How to evaluate the quality of a test suite?","How to overcome the problems of Code Coverage metrics?"]},o="Mutation Testing",r={id:"Flavours/Testing/mutation-testing",title:"Mutation Testing",description:"Mutation Testing is a technique which enables us to evaluate the quality of a test suite. It works by mutating the source code and then running the tests to check whether the tests can detect the mutant. Mutating source code implies making a small change in the source code, for example by changing conditions, inverting negatives, etc.",source:"@site/content/Flavours/Testing/mutation-testing.md",sourceDirName:"Flavours/Testing",slug:"/Flavours/Testing/mutation-testing",permalink:"/Flavours/Testing/mutation-testing",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{categories:["Testing"],authors:["Valentina Cupa\u0107","Guilaume Faas"],problems:["How to evaluate the quality of a test suite?","How to overcome the problems of Code Coverage metrics?"]},sidebar:"topicSidebar",previous:{title:"Fluent Assertions",permalink:"/Flavours/Testing/fluent-assertions"},next:{title:"Property-Based Testing",permalink:"/Flavours/Testing/pbt"}},l={},c=[{value:"Why?",id:"why",level:2},{value:"Problems",id:"problems",level:2},{value:"How to",id:"how-to",level:2},{value:"How to (Java)",id:"how-to-java",level:2},{value:"Gradle",id:"gradle",level:3},{value:"Maven",id:"maven",level:3},{value:"How to (.NET)",id:"how-to-net",level:2},{value:"A real life example",id:"a-real-life-example",level:2},{value:"Constraint",id:"constraint",level:2},{value:"Resources",id:"resources",level:2}];function h(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.M)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"mutation-testing",children:"Mutation Testing"}),"\n",(0,i.jsx)(t.p,{children:"Mutation Testing is a technique which enables us to evaluate the quality of a test suite. It works by mutating the source code and then running the tests to check whether the tests can detect the mutant. Mutating source code implies making a small change in the source code, for example by changing conditions, inverting negatives, etc."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"In a high quality test suite, mutating the source code results in failing test(s), thereby killing the mutant."}),"\n",(0,i.jsx)(t.li,{children:"In a low quality test suite, the tests still pass even after the mutation, thereby the mutant has survived."}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:["Mutation score is the percentage of mutants killed, i.e. ",(0,i.jsx)(t.code,{children:"Killed Mutant Count / Total Mutant Count * 100"}),"."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["A score of 100% is a good indicator for test suite quality.","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"It indicates that if we ever have a regression bug in our code, that it will be able to be detected by the test."}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:["Any score less than 100% indicates gaps in the test suite","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"It indicates missing behavioural assertions"}),"\n",(0,i.jsx)(t.li,{children:"It means that code exhibits behaviour which is not covered by any test"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"why",children:"Why?"}),"\n",(0,i.jsx)(t.p,{children:"Code Coverage metrics (e.g. line coverage, branch coverage) only provide feedback regarding the percentage of code executed by the tests. Unfortunately, they do not provide us feedback regarding the quality of our test suite."}),"\n",(0,i.jsx)(t.p,{children:"In the case of Assertion Free Testing, whereby there are no assertions in the tests, it is possible to get a high Code Coverage score (even 100%) but we're not actually testing anything."}),"\n",(0,i.jsx)(t.p,{children:"Mutation Testing helps us overcome some problems faced when using classical Code Coverage Metrics - because Mutation Testing is able to identify holes in behavioural assertions. In the case of Assertion Free Testing (or in the case of partial assertion), the Mutation Score will be low, thereby indicating a low quality test suite."}),"\n",(0,i.jsx)(t.h2,{id:"problems",children:"Problems"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"How to evaluate the quality of a test suite?"}),"\n",(0,i.jsx)(t.li,{children:"How to discover missing test cases?"}),"\n",(0,i.jsx)(t.li,{children:"How to overcome the problems of Code Coverage metrics?"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"how-to",children:"How to"}),"\n",(0,i.jsx)(t.p,{children:"We will showcase how to add Mutation Testing in Java and .NET projects."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Write an assertion-free test, which runs the code but no assertions"}),"\n",(0,i.jsx)(t.li,{children:"Run code coverage metrics to show 100% code coverage"}),"\n",(0,i.jsx)(t.li,{children:"Run mutation testing to show 0% mutation score"}),"\n",(0,i.jsx)(t.li,{children:"Retroactively add the missing assertions and achieve 100% mutation score"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"how-to-java",children:"How to (Java)"}),"\n",(0,i.jsx)(t.p,{children:"We can run Mutation Testing in Java using the Pitest plugin."}),"\n",(0,i.jsx)(t.p,{children:"The following example illustrates usage of Pitest with Gradle/Maven and JUnit5.\nVersions shown are the current versions as at time of writing."}),"\n",(0,i.jsx)(t.h3,{id:"gradle",children:"Gradle"}),"\n",(0,i.jsxs)(t.p,{children:["Pitest is registered within ",(0,i.jsx)(t.code,{children:"build.gradle"}),":"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-groovy",children:"plugins {\n    id 'info.solidsoft.pitest' version '1.7.4'\n}\n\npitest {\n    junit5PluginVersion = '0.15'\n}\n"})}),"\n",(0,i.jsx)(t.h3,{id:"maven",children:"Maven"}),"\n",(0,i.jsxs)(t.p,{children:["Pitest is registered within ",(0,i.jsx)(t.code,{children:"pom.xml"}),":"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-xml",children:"<properties>\n    <pitest.version>1.8.0</pitest.version>\n    <pitest.junit5.version>0.15</pitest.junit5.version>\n</properties>\n\n<plugin>\n    <groupId>org.pitest</groupId>\n    <artifactId>pitest-maven</artifactId>\n    <version>${pitest.version}</version>\n</plugin>\n\n<dependency>\n    <groupId>org.pitest</groupId>\n    <artifactId>pitest-junit5-plugin</artifactId>\n    <version>${pitest.junit5.version}</version>\n    <scope>test</scope>\n</dependency>\n"})}),"\n",(0,i.jsx)(t.p,{children:"Suppose we have a poorly-written test. This test is executing code, but there are no assertions regarding expected behaviour (assertion-free testing):"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-java",children:"@Test\nvoid should_add_two_numbers() {\n    calculator.add(2, 3);\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"When we run pitest, we get a high score for Line Coverage but a low score for Mutation Coverage:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mutation Testing - Low Score - Summary",src:n(5392).c+"",width:"703",height:"68"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mutation Testing - Low Score - Details",src:n(2904).c+"",width:"892",height:"341"})}),"\n",(0,i.jsx)(t.p,{children:"Suppose we have a well-written test, which has appropriate assertions regarding expected behaviour:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-java",children:"@Test\nvoid should_add_two_numbers() {\n    var result = calculator.add(2, 3);\n    assertThat(result).isEqualTo(5);\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"When we run pitest, we get a high score for Line Coverage a high score for Mutation Coverage:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mutation Testing - High Score - Summary",src:n(5736).c+"",width:"697",height:"65"})}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mutation Testing - High Score - Details",src:n(1056).c+"",width:"864",height:"328"})}),"\n",(0,i.jsxs)(t.p,{children:["Source: The above code samples are based on extracts from the GitHub repository ",(0,i.jsx)(t.a,{href:"https://github.com/valentinacupac/calculator-kata-java",children:"Calculator Kata (Java)"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"how-to-net",children:"How to (.NET)"}),"\n",(0,i.jsx)(t.p,{children:"We can run Mutation Testing in .NET using Stryker.NET."}),"\n",(0,i.jsx)(t.p,{children:"The Stryker tool can be installed as follows:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"dotnet tool install -g dotnet-stryker\n"})}),"\n",(0,i.jsxs)(t.p,{children:["In order to run ",(0,i.jsx)(t.code,{children:"Stryker"}),", you have to go inside your Tests folder:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"cd [solution]/Tests\n"})}
1),"\n",(0,i.jsx)(t.p,{children:"Then, the following command:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"dotnet stryker\n"})}),"\n",(0,i.jsxs)(t.p,{children:["The process will generate a ",(0,i.jsx)(t.code,{children:"StrykerOutput"})," folder with subfolders by timestamp, each one of them containing a mutation report."]}),"\n",(0,i.jsx)(t.p,{children:"Suppose we have a poorly-written test. This test is executing code, but there are no assertions regarding expected behaviour (assertion-free testing):"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-csharp",children:"[Fact]\npublic void Should_add_two_numbers()\n{\n    calculator.Add(2, 3);\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"When we run Stryker, we get a low Mutation Score:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mutation Testing - Low Score - Summary",src:n(3384).c+"",width:"1808",height:"468"})}),"\n",(0,i.jsx)(t.p,{children:"Suppose we have a well-written test, which has appropriate assertions regarding expected behaviour:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-csharp",children:"[Fact]\npublic void Should_add_two_numbers()\n{\n    var result = calculator.Add(2, 3);\n    result.Should().Be(5);\n}\n"})}),"\n",(0,i.jsx)(t.p,{children:"When we run Stryker, we get a high Mutation Score:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Mutation Testing - High Score - Summary",src:n(1576).c+"",width:"1830",height:"488"})}),"\n",(0,i.jsxs)(t.p,{children:["Source: The above code samples are based on extracts from the GitHub repository ",(0,i.jsx)(t.a,{href:"https://github.com/valentinacupac/calculator-kata-dotnet",children:"Calculator Kata (.NET)"}),"."]}),"\n",(0,i.jsx)(t.h2,{id:"a-real-life-example",children:"A real life example"}),"\n",(0,i.jsxs)(t.p,{children:["November 2022, OpenSSL ",(0,i.jsx)(t.a,{href:"https://www.tenable.com/blog/cve-2022-3786-and-cve-2022-3602-openssl-patches-two-high-severity-vulnerabilities",children:"CVE-2022-3602"})," has been fixed."]}),"\n",(0,i.jsxs)(t.p,{children:["Take a look at the fix:\n",(0,i.jsx)(t.a,{href:"https://github.com/openssl/openssl/commit/3b421ebc64c7b52f1b9feb3812bdc7781c784332",children:(0,i.jsx)(t.img,{alt:"Fix CVE",src:n(4112).c+"",width:"2778",height:"1112"})})]}),"\n",(0,i.jsx)(t.p,{children:"It could have been easily detected by using this technique and the vulnerability should have not exist at all..."}),"\n",(0,i.jsx)(t.h2,{id:"constraint",children:"Constraint"}),"\n",(0,i.jsx)(t.p,{children:"To check the quality of your test suite:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Run Code Coverage, and write any missing tests to ensure you have a high Code Coverage"}),"\n",(0,i.jsx)(t.li,{children:"Run Mutation Testing, and write any missing tests to ensure you have a high Mutation Score"}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The following should be noted:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"If you are applying TDD, you will naturally reach high scores for both the metrics above"}),"\n",(0,i.jsx)(t.li,{children:"If you are not applying TDD, you will likley get low metrics (especially for Mutation Testing), and will need to put more effort retroactively to get a high Mutation Score"}),"\n",(0,i.jsx)(t.li,{children:"The reason for running Code Coverage metrics before running Mutation Testing metrics is because Code Coverage metrics are computed faster, and Mutation Testing takes longer to run"}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"resources",children:"Resources"}),"\n",(0,i.jsx)(t.p,{children:"The following are used for running Mutation Testing:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://pitest.org/",children:"Pitest (Java)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://stryker-mutator.io/docs/stryker-net/Introduction",children:"Stryker (.NET)"})}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"The following are the GitHub code samples used in this page:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/valentinacupac/calculator-kata-java",children:"Calculator Kata (Java)"})}),"\n",(0,i.jsx)(t.li,{children:(0,i.jsx)(t.a,{href:"https://github.com/valentinacupac/calculator-kata-dotnet",children:"Calculator Kata (.NET)"})}),"\n"]})]})}function d(e={}){const{wrapper:t}={...(0,s.M)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1576:(e,t,n)=>{n.d(t,{c:()=>i});const i=n.p+"assets/images/mutation-testing-dotnet-high-score-b60d946e4aefe4370a43b633d7d079ab.webp"},3384:(e,t,n)=>{n.d(t,{c:()=>i});const i=n.p+"assets/images/mutation-testing-dotnet-low-score-7baa2be7974ff869627686fc6d3d3190.webp"},1056:(e,t,n)=>{n.d(t,{c:()=>i});const i="data:image/webp;base64,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"},5736:(e,t,n)=>{n.d(t,{c:()=>i});const i="data:image/webp;base64,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"},2904:(e,t,n)=>{n.d(t,{c:()=>i});const i="data:image/webp;base64,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"},5392:(e,t,n)=>{n.d(t,{c:()=>i});const i="data:image/webp;base64,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"},4112:(e,t,n)=>{n.d(t,{c:()=>i});const i=n.p+"assets/images/mutation-testing-openssl-5ec26b293e8623cd3bd6044c524fb9c8.webp"},2172:(e,t,n)=>{n.d(t,{I:()=>r,M:()=>o});var i=n(1504);const s={},a=i.createContext(s);function o(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.