Skip to content

NUnit 4.0でAssertメソッドが見つからない問題の解決方法

問題の説明

Visual Studio 2022でNUnit 4.0.1とNUnit3TestAdapter 4.5.0を使用している場合、以下のエラーが発生することがあります:

plaintext
エラー 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 を使用(旧構文を維持)

既存のテストコードを最小限の変更で修正する方法:

  1. 名前空間の追加
    テストクラスに新しい名前空間をインポート:

    cs
    using NUnit.Framework;
    using NUnit.Framework.Legacy; // これを追加
  2. Assert → ClassicAssert への置換
    すべてのアサーションを書き換え:

    cs
    // 変更前
    Assert.IsTrue(result);
    Assert.AreEqual(expected, actual);
    
    // 変更後
    ClassicAssert.IsTrue(result);
    ClassicAssert.AreEqual(expected, actual);

注意点

  • 既存テストが多数ある場合の一時的対応として有効
  • 長期的には新しい構文への移行を推奨

方法 2: 新しい構文へ移行(推奨)

NUnit 4.0 で推奨される Assert.That() スタイル:

cs
// 単一の値チェック
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));

新しい構文のメリット

  • 可読性が向上(英語の文章のように記述可能)
  • カスタムメッセージの追加が容易
cs
Assert.That(
    result, 
    Is.EqualTo(expected), 
    $"期待値: {expected}, 実際の値: {result}"
);
  • 複合条件の簡潔な表現
cs
Assert.That(value, Is.GreaterThan(0).And.LessThan(100));

方法比較表

方法変更量将来性推奨度
ClassicAssert小 (検索/置換)△ (非推奨化の可能性)短期対応
Assert.That()中 (構文変更)◎ (公式推奨)新規プロジェクト

補足と注意事項

  1. ダウングレードは非推奨
    NUnit v3.13.x への戻しは解決策ではありません:

    • 新しい機能やセキュリティ修正が適用されない
    • 長期的なメンテナンス性が低下
  2. テストアダプタの互換性
    NUnit3TestAdapter v4.5.0+ は NUnit 4.x を完全サポート:

    xml
    <!-- 正しいパッケージバージョン例 -->
    <PackageReference Include="NUnit" Version="4.0.1" />
    <PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
  3. 移行ツール活用
    大規模プロジェクトでは公式の移行ガイドを参照し、段階的リファクタリングを推奨

  4. よくあるメソッド対応表

    旧構文新しい構文
    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))

参考リソース

  1. 公式移行ガイド
  2. 新アサーション構文ドキュメント
  3. ClassicAssert リファレンス(非推奨機能の注意)