はじめに
今回はNUnit v4での破壊的変更について書きたいと思います。
そもそもNUnitとは?と思う方に向けて簡単に説明すると、.NET向けのユニットテストフレームワークです。特にUnityを触られている方は、触ったことがあるかと思います。
NUnit is a unit-testing framework for all .Net languages. Initially ported from JUnit, the current production release, version 3, has been completely rewritten with many new features and support for a wide range of .NET platforms.
// DeepL翻訳
NUnitは、すべての.NET言語向けのユニットテストフレームワークです。当初はJUnitから移植されましたが、現在の製品版であるバージョン3は完全に書き直され、多くの新機能と幅広い.NETプラットフォームへの対応を備えています。
NUnit4.0はNov 27, 2023にはリリースされています。ですので今更感はあるのですが、UnityではNUnit 3.5をベースに活用しているのでNUnit4.0の変更点について知らない人も多いのではないでしょうか。
github.com
docs.unity3d.com
NUnit4.0での変更を知っていないと、NUnit3から4に更新した時に大量のコンパイルエラーが出てくることになってしまうので知っておいて損はないかと思います。
また先週リリースされたv4.5によりこの破壊的変更によるコンパイルエラーがなくなりました。まさかの展開ではあったのですが、そのことについても触れたいと思います。
概要
具体的には以下のメソッドなどが名前空間とクラス名が変わっています。詳細は公式ドキュメントを参照してください。
- Assert.True
- Assert.False
- Assert.Null
- Assert.NotNull
- Assert.Zero
- Assert.NotZero
- Assert.IsNaN
- Assert.IsEmpty
- Assert.IsNotEmpty
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreSame
- Assert.AreNotSame
- Assert.Contains
- Assert.Greater
- Assert.GreaterOrEqual
- Assert.Less
- Assert.LessOrEqual
- Assert.Positive
- Assert.Negative
- Assert.IsInstanceOf
- Assert.IsNotInstanceOf
- Assert.IsAssignableFrom
- Assert.IsNotAssignableFrom
移行ガイドはこちらにあります。
具体例
// NUnit3 using NUnit.Framework; Assert.True(hoge);
// NUnit4 using NUnit.Framework.Legacy ClassicAssert.True(hoge);
v4.5からの変更について
v4.0.0~v4.4.0まではコンパイルエラーになるのですが、v4.5.0でまさかのv3での書き方でもコンパイルエラーにならないように改修が入りました。
github.com
// v4.5.0なら以下の書き方もコンパイルエラーにならない using NUnit.Framework; Assert.True(hoge);
C#14で導入された拡張メンバーにより実現されています。
learn.microsoft.com
Assert.Thatを活用した時のIsやDoesといった書き方への不満や、分かりづらい、互換性といった声が届いており、それに応えた形なのかなと思います。
github.com
github.com