この記事は C# Advent Calendar 2020 の 8 日目の記事です。
Microsoft 公式ドキュメント .NET でのテスト - .NET Core | Microsoft Docs に記載されている主要な三つの xUnit, NUnit, MSTest フレームワークを比較してみます。
結論、どれを使うべきか
新しいプロジェクトなら xUnit か NUnit を使うとよいと思います。過去のプロジェクトのマイグレーションならそのプロジェクトで使っているフレームワークでよいと思います。
Visual Studio からの実行や CLI (dotnet test
) の実行、例外テストやデータドリブンテスト (Theory, DataSource) といった主要な機能はどのフレームワークでも対応しています。
個人的には xUnit の書き方が好きなので xUnit を使うことが多いです。
トレンド
xUnit と NUnit が人気で、 MSTest は低めの結果になっています。 2020/12/6 での計測です。
過去一年間の NuGet
xUnit, NUnit, MSTest の順です。 MSTest はだいぶ低いですね。
GitHub
Stars を見ると xUnit が多いですね。 NUnit もそれなりです。 MSTest はとても少なくなっています。
2020 年の検索ワード
日本で見ると xUnit が少し低め。 NUnit, MSTest が同率です。
Japan - xUnit, NUnit, MSTest - Explore - Google Trends
世界中で見ると xUnit, NUnit が高いです。 MSTest は低いですね。
Worldwide - xUnit, NUnit, MSTest - Explore - Google Trends
細かい話(もっと知りたい人向け)
xUnit, NUnit はどちらも .NET Foundation がオーナーで、 MSTest は Microsoft がオーナーです。なのでどれも Microsoft 製なようなものです。
実際に Microsoft 関連の GitHub Repository を見てみると、 dotnet/aspnetcore や Azure/azure-powershell は xUnit を使っており、 dotnet/maui は NUnit を使っています。
日本発の C# フレームワークとライブラリで有名な企業の Cysharp, Inc の比較的新しいリポジトリ Cysharp/ConsoleAppFramework は xUnit を使っています。
MSTest は GitHub を検索してみた mstest · GitHub Topics のですが、これと言ってよさそうなものが見つかりませんでした。
ライセンスは NUnit と MSTest は MIT License で、 xUnit のみ Apache License 2.0 (※ LICENCE ファイルの書き方が特殊だけどたぶん合っているはず) です。なのでどれもライセンス表記で使えます。商用などあまり気にしなくても大丈夫ですね。
それぞれの機能やコードの書き方の違いなどは Unit Testing Frameworks: XUnit vs. NUnit vs. MSTEST for .NET and .NET Core | by Robin Ding | Medium や Comparing xUnit.net to other frameworks > xUnit.net が参考になると思います。内容は英語ですが表形式なので理解できるかと思います。
.NET 5 とそれぞれのテストフレームワークで作ったソースコードは KtoZ/dotNet5TestFrameworkDifference に置いてあるので参考にしてください。
参考
- xUnit
- NUnit
- 公式: NUnit.org
- GitHub: GitHub - nunit/nunit: NUnit 3 Framework
- NuGet: NuGet Gallery | NUnit
- MSTest