Stryker4s v0.10.0
Stryker4s is a mutation testing framework. It tests your tests by temporarily inserting small bugs, or mutants, into your production code. Your tests are run for each mutant. If your tests fail then the mutant is killed. If your tests passed, the mutant survived. The higher the percentage of mutants killed, the more effective your tests are. See the website for more information.
We are excited to release Stryker4s v0.10.0. If you haven't been following along, this is a big one! The sbt testrunner has been completely reworked to be a lot faster. So much faster I am not even sure how to put it into words! For perspective, running Stryker4s on itself took around 40 minutes on 0.9.2. On 0.10.0 it takes just a little over 2 minutes! This massive improvement is possible due to the new testrunner (#492), which is able to run your tests in rapid-fire without restarting any processes. We believe the Stryker4s sbt plugin is now fast enough for daily use, and probably even faster than some mutation testing frameworks in other languages! If performance has been keeping you from trying Stryker4s be sure to give it a try and let us know your results Slack.
Another big feature and performance boost since 0.10.0-RC3 is that coverage analysis is now supported (#666). Tests will now be skipped and reported as NoCoverage
if no test hits that mutant. It also adds support for detecting 'static' mutants which has been an issue since the 0.10.0-RC releases.
Note that due to these changes it is very likely that your mutation score will be a little different than it was in 0.9.2!
Next up on the roadmap is further speed improvements by only running tests that a specific mutant covers, adding concurrent testrunners, and bringing these awesome speed improvements to the Maven plugin.
🚀 Features
- Mutant coverage (sbt plugin) (#666) @hugo-vrijswijk
- Add projectRoot to report JSON (#670) @hugo-vrijswijk
🧰 Maintenance
- Use gpg2 to sign releases (#659) @hugo-vrijswijk
- Use ScalaTests ExecutionContext when running AsyncSpec (#638) @hugo-vrijswijk