Skip to main content

Introducing Stryker.NET and Stryker4s

ยท 3 min read
Nico Jansen
Nico Jansen
Stryker Team

We're excited to announce that we're doubling the number of supported languages for Stryker. We already had support for JavaScript and Typescript, and now both C# and Scala are supported as preview versions. Try them out and let us know what you think.

New platformsโ€‹

As you might know, both C# and Scala run on entirely different platforms compared to Stryker (which runs on NodeJS). This is the main reason we decided to implement them as separate frameworks. Stryker.NET is written in C# and runs as a .NET Core application, while Stryker4s is written in Scala and runs on the JVM (Java Virtual Machine). As of now, a version of Stryker.NET can be found on nuget.org, the package manager for the .NET platform. In due time, Stryker4s can be found on Maven Central.

Stryker.NET is the result of the internship of Richard.
Stryker4s is the result of the internship of Hugo.

Thanks to them both for their hard work and continued support.

Getting startedโ€‹

As you might have noticed, we've redesigned our website. It is focussed to help you get started on the platform of choice.

One design mentalityโ€‹

Although all 3 versions of Stryker are implemented on different platforms, the design goals are the same. It should be easy to use and fast to run. Without compromises.

For Stryker JavaScript we're mutating source code (as explained in our road to Stryker 1.0 blog post), instead of transpiled/minified JavaScript code. The main advantage is that it makes sure we only mutate your actual code, instead of 3rd party library or minified code.

We wanted to offer the same quality to the .NET and Scala counterparts, but they have one additional problem: compiling code takes a long time. It would dramatically reduce the performance of the frameworks. This is why we chose to implement a new mutation testing technique we call Mutation Switching. With this technique, we compile only once. This results in a drastic performance gain, without compromising the quality of the mutations. It really deserves it's own blog post, so more on that later.

Collaborationโ€‹

Though the 3 frameworks have their own code base, there are actually a lot of points on which we're planning to collaborate.

  • One vocabulary
    Terms like mutant, survived and mutator will mean the same across platforms. We will even share the names for the mutators, see the supported mutators in our handbook for a comprehensive list of supported mutators.
  • One website
    We'll keep things together with one website. This will help visibility for all platforms and keep things simple for our users.
  • One html reporter
    We're redesigning our html report as HTML 5 web components. It really is it's own thing and might even be used for other mutation testing frameworks out there. Interested to help? Please let us know! Github repository here.
  • One dashboard
    We're planning on supporting our mutation testing dashboard for all 3 implementations.

What about good old Stryker?โ€‹

You might wonder what this all means for Stryker (for JavaScript and friends). Well, not much. The core developers are still here, focussed as ever. We're still focused on getting the 1.0 release out there for you. We had to invest some time in the overhead of setting this all up, but it will result in better and more complete frameworks in the end.