次の方法で共有


MSTest アサーション

Assert 名前空間のMicrosoft.VisualStudio.TestTools.UnitTesting クラスを使用して特定の機能を検証します。 テスト メソッドは、アプリケーションでコードを実行しますが、 Assert ステートメントを含める場合にのみ正確性を報告します。

概要

MSTest には、次の 3 つのアサーション クラスが用意されています。

クラス 目的
Assert 値、型、および例外の汎用アサーション。
StringAssert パターン、部分文字列、および比較の文字列専用のアサーション。
CollectionAssert コレクションを比較および検証するためのコレクション アサーション。

ヒント

AssertStringAssert/CollectionAssertの両方に機能が存在する場合は、Assert クラスを使用します。 Assert クラスは、より優れた検出可能性を提供し、新しいコードに推奨される選択肢です。 StringAssertCollectionAssert は下位互換性のために維持されます。

すべてのアサーション メソッドは、アサーションが失敗したときに表示されるオプションのメッセージ パラメーターを受け取り、原因を特定するのに役立ちます。

Assert.AreEqual(expected, actual, "Values should match after processing");

Assert クラス

Assert クラスを使用して、テスト対象のコードが期待どおりに動作することを確認します。

一般的なアサーションメソッド

[TestMethod]
public async Task AssertExamples()
{
    // Equality
    Assert.AreEqual(5, calculator.Add(2, 3));
    Assert.AreNotEqual(0, result);

    // Reference equality
    Assert.AreSame(expected, actual);
    Assert.AreNotSame(obj1, obj2);

    // Boolean conditions
    Assert.IsTrue(result > 0);
    Assert.IsFalse(string.IsNullOrEmpty(name));

    // Null checks
    Assert.IsNull(optionalValue);
    Assert.IsNotNull(requiredValue);

    // Type checks
    Assert.IsInstanceOfType<IDisposable>(obj);
    Assert.IsNotInstanceOfType<string>(obj);

    // Exception testing (MSTest v3.8+)
    Assert.ThrowsExactly<ArgumentNullException>(() => service.Process(null!));
    await Assert.ThrowsExactlyAsync<InvalidOperationException>(
        async () => await service.ProcessAsync());
}

使用可能な API

StringAssert クラス

StringAssert クラスは、文字列の比較と確認に使用します。

すべての StringAssert メソッドには、 Assert クラスに相当するものがあります。 Assertメソッドを使用して、検出可能性を高めます。 StringAssert クラスは、下位互換性のために維持されます。

使用可能な API は次のとおりです。

CollectionAssert クラス

CollectionAssert クラスは、オブジェクトのコレクションを比較する場合や、コレクションの状態を確認する場合に使用します。

Assert クラスに同等のメソッド (Assert.ContainsAssert.DoesNotContain など) が存在する場合は、Assertを使用して検出しやすくします。 CollectionAssert クラスは、主に下位互換性のために保持されます。

使用可能な API は次のとおりです。

ベスト プラクティス

  1. 特定のアサーションを使用する: エラー メッセージを改善するために、AreEqualよりもIsTrue(a == b)を優先します。

  2. わかりやすいメッセージを含める: 明確なアサーション メッセージを使用して、エラーをすばやく特定するのに役立ちます。

  3. 一度に 1 つのことをテストする: 各テスト メソッドでは、1 つの動作を検証する必要があります。

  4. Throws / ThrowsExactlyを使用する例外の場合: MSTest v3.8 以降では、Assert.Throws属性よりも、Assert.ThrowsExactlyThrowsAsync、および非同期の対応する (ThrowsExactlyAsyncExpectedException) を優先します。

  5. Assert StringAssert /よりもCollectionAssertを優先する: 両方のクラスに機能が存在する場合は、Assert クラスを使用して検出性と一貫性を向上させます。

次のアナライザーは、アサーションを適切に使用するのに役立ちます。

  • MSTEST0006 - 属性 ExpectedException 避け、代わりに Assert.Throws メソッドを使用します。
  • MSTEST0017 - アサーション引数は正しい順序で渡す必要があります。
  • MSTEST0023 - ブールアサーションを否定しないでください。
  • MSTEST0025 - 常に誤った条件よりも Assert.Fail を優先します。
  • MSTEST0026 - アサーション引数は条件付きアクセスを回避する必要があります。
  • MSTEST0032 - 常に真のアサート条件を確認します。
  • MSTEST0037 - 適切なアサート メソッドを使用します。
  • MSTEST0038 - 値型での Assert.AreSame は避けてください。
  • MSTEST0039 - 新しい Assert.Throws メソッドを使用します。
  • MSTEST0040 - 非同期 void コンテキストでアサートを使用しないようにします。
  • MSTEST0046 - Assertの代わりにStringAssertを使用します。
  • MSTEST0051 - Assert.Throws には 1 つのステートメントを含める必要があります。
  • MSTEST0053 - 書式設定パラメーター Assert 避けます。
  • MSTEST0058 - catch ブロック内のアサートを回避します。

こちらも参照ください