• Simplifying integration testing with .NET and Playwright

    In my earlier blog, Integration Testing with Playwright and Testcontainers, I shared how to use a WebApplicationFactory with TestContainers and Playwright to set up integration tests. While this approach works well, I encountered a problem: the setup inadvertently spins up two separate hosts, leading to unwanted behaviour.

  • Stryker in a CI/CD pipeline

    In my last blog I wrote about why mutation testing is a better way of measuring test completeness. I also mentioned the drawback regarding performance.

  • Use mutation testing to replace code coverage

    It is pretty common to use some sort of code coverage measurement tool along with unit tests to gather feedback on completeness of your test suite. Measuring code coverage is great start to find out if your code needs more testing. But by it’s nature it also comes with some caveats. In this article I’ll explain these caveats and how mutation testing fills these caps and turns out more valuable as a source of feedback.

  • Simplifying .NET solution upgrades with Directory.Build.props and Directory.Packages.props

    With .NET 8 almost released it is time to make upgrading easier. In this blog I’ll explain about Directory.Build.props and Directory.Packages.props and how these can make upgrading easier.

  • Integration testing with Playwright and Testcontainers in ASP.NET

    Testing plays a crucial role in software development and we strive to test as much as possible using isolated unittests. However, there are times when these unittests fail to capture issues that arise when the entire application is tested. Such issues may include discrepancies between front-end and back-end implementation of APIs, or differences in behavior between real and mocked databases. These problems can be easily identified by running a series of scenarios that test the entire application, including the front-end, back-end, and database. Many developers resort to manual testing to achieve this, but automated testing offers greater repeatability and the ability to integrate checks into the development pipeline.

  • Source generation in System.Text.Json, should I care?

    With the release of .NET 6 also came the option to use source generation in System.Text.Json. In short this means that instead of runtime reflection some of the work is now done compile time. This makes it more efficient. But how much? And should I care? Just measure it. I made a small project that you can use and adjust to measure the difference for your specific case. Let the results help you decide what’s best for your application.

  • Safer Jenkins pipelines on kubernetes

    Jenkins and kubernetes are a great combination. I love the concept of leveraing container technology to provide any build tools that you might require. However in many cases the examples provided are not always the best or most secure.

  • Automated Kubernetes installation on Hyper-V

    This artice describes how you can create a kubernetes custer using Vagrant, Hyper-V and Packer.

  • Static IPs with NAT on Hyper-V

    The goal is to have networking with static ip addresses for virtual machines on Hyper-V. The machine must also be able to access the internet. The easiest way is to start a Powershell session with elevated rights. Then use the follwing three commands. Feel free to change any names and ip address ranges.