NUnit 4.0でAssertメソッドが見つからない問題の解決方法
問題の説明
Visual Studio 2022でNUnit 4.0.1とNUnit3TestAdapter 4.5.0を使用している場合、以下のエラーが発生することがあります:
エラー CS0117 'Assert' に 'AreEqual' の定義が含まれていません
エラー CS0117 'Assert' に 'IsNotEmpty' の定義が含まれていません
エラー CS0117 'Assert' に 'IsTrue' の定義が含まれていません
これは、Assert.AreEqual()
, Assert.IsTrue()
などの従来のメソッドが突然認識されなくなる現象です。再インストールやソリューションのクリーニングなど一般的な解決策を試しても改善しないのが特徴です。
発生条件
- NUnit 4.x へのアップグレード直後
- .NET Core 3.1+ または .NET 5+ のテストプロジェクト
- Visual Studio 2019/2022 の最新バージョン
原因
この問題は NUnit 4.0 の破壊的変更 によるものです:
Assert
クラスから従来のメソッド(AreEqual
,IsTrue
など)が削除- 代わりに
Assert.That()
ベースの新しい構文が推奨 - 旧構文は
ClassicAssert
クラスに移動
公式ドキュメントでは移行ガイドでこの変更が説明されています。
解決方法
方法 1: ClassicAssert を使用(旧構文を維持)
既存のテストコードを最小限の変更で修正する方法:
名前空間の追加
テストクラスに新しい名前空間をインポート:csusing NUnit.Framework; using NUnit.Framework.Legacy; // これを追加
Assert → ClassicAssert への置換
すべてのアサーションを書き換え:cs// 変更前 Assert.IsTrue(result); Assert.AreEqual(expected, actual); // 変更後 ClassicAssert.IsTrue(result); ClassicAssert.AreEqual(expected, actual);
注意点
- 既存テストが多数ある場合の一時的対応として有効
- 長期的には新しい構文への移行を推奨
方法 2: 新しい構文へ移行(推奨)
NUnit 4.0 で推奨される Assert.That()
スタイル:
// 単一の値チェック
Assert.That(result, Is.True);
Assert.That(result, Is.False);
Assert.That(result, Is.Null);
Assert.That(result, Is.Not.Null);
// 値比較
Assert.That(actual, Is.EqualTo(expected));
// コレクション検証
Assert.That(collection, Is.Not.Empty);
Assert.That(collection, Contains.Item(targetValue));
新しい構文のメリット
- 可読性が向上(英語の文章のように記述可能)
- カスタムメッセージの追加が容易
Assert.That(
result,
Is.EqualTo(expected),
$"期待値: {expected}, 実際の値: {result}"
);
- 複合条件の簡潔な表現
Assert.That(value, Is.GreaterThan(0).And.LessThan(100));
方法比較表
方法 | 変更量 | 将来性 | 推奨度 |
---|---|---|---|
ClassicAssert | 小 (検索/置換) | △ (非推奨化の可能性) | 短期対応 |
Assert.That() | 中 (構文変更) | ◎ (公式推奨) | 新規プロジェクト |
補足と注意事項
ダウングレードは非推奨
NUnit v3.13.x への戻しは解決策ではありません:- 新しい機能やセキュリティ修正が適用されない
- 長期的なメンテナンス性が低下
テストアダプタの互換性
NUnit3TestAdapter v4.5.0+ は NUnit 4.x を完全サポート:xml<!-- 正しいパッケージバージョン例 --> <PackageReference Include="NUnit" Version="4.0.1" /> <PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
移行ツール活用
大規模プロジェクトでは公式の移行ガイドを参照し、段階的リファクタリングを推奨よくあるメソッド対応表
旧構文 新しい構文 Assert.IsTrue(x)
Assert.That(x, Is.True)
Assert.AreEqual(a,b)
Assert.That(a, Is.EqualTo(b))
Assert.IsNull(x)
Assert.That(x, Is.Null)
Assert.IsNotEmpty(c)
Assert.That(c, Is.Not.Empty)
Assert.Greater(x,y)
Assert.That(x, Is.GreaterThan(y))