Assert 名前空間のMicrosoft.VisualStudio.TestTools.UnitTesting クラスを使用して特定の機能を検証します。 テスト メソッドは、アプリケーションでコードを実行しますが、 Assert ステートメントを含める場合にのみ正確性を報告します。
概要
MSTest には、次の 3 つのアサーション クラスが用意されています。
| クラス | 目的 |
|---|---|
Assert |
値、型、および例外の汎用アサーション。 |
StringAssert |
パターン、部分文字列、および比較の文字列専用のアサーション。 |
CollectionAssert |
コレクションを比較および検証するためのコレクション アサーション。 |
ヒント
AssertとStringAssert/CollectionAssertの両方に機能が存在する場合は、Assert クラスを使用します。
Assert クラスは、より優れた検出可能性を提供し、新しいコードに推奨される選択肢です。
StringAssert と CollectionAssert は下位互換性のために維持されます。
すべてのアサーション メソッドは、アサーションが失敗したときに表示されるオプションのメッセージ パラメーターを受け取り、原因を特定するのに役立ちます。
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
- Assert.AreEqual
- Assert.AreNotEqual
- Assert.AreNotSame
- Assert.AreSame
- Assert.Contains
- Assert.ContainsSingle
- Assert.DoesNotContain
- Assert.DoesNotEndWith
- Assert.DoesNotMatchRegex
- Assert.DoesNotStartWith
- Assert.Fail
- Assert.HasCount
- Assert.Inconclusive
- Assert.IsEmpty
- Assert.IsFalse
- Assert.IsGreaterThan
- Assert.IsGreaterThanOrEqualTo
- Assert.IsInRange
- Assert.IsInstanceOfType
- Assert.IsLessThan
- Assert.IsLessThanOrEqualTo
- Assert.IsNegative
- Assert.IsNotEmpty
- Assert.IsNotInstanceOfType
- Assert.IsNotNull
- Assert.IsNull
- Assert.IsPositive
- Assert.IsTrue
- Assert.MatchesRegex
- Assert.StartsWith
- Assert.Throws
- Assert.ThrowsAsync
- Assert.ThrowsExactly
- Assert.ThrowsExactlyAsync
StringAssert クラス
StringAssert クラスは、文字列の比較と確認に使用します。
注
すべての StringAssert メソッドには、 Assert クラスに相当するものがあります。
Assertメソッドを使用して、検出可能性を高めます。
StringAssert クラスは、下位互換性のために維持されます。
使用可能な API は次のとおりです。
- StringAssert.Contains
- StringAssert.DoesNotMatch
- StringAssert.EndsWith
- StringAssert.Matches
- StringAssert.StartsWith
CollectionAssert クラス
CollectionAssert クラスは、オブジェクトのコレクションを比較する場合や、コレクションの状態を確認する場合に使用します。
注
Assert クラスに同等のメソッド (Assert.Contains、Assert.DoesNotContain など) が存在する場合は、Assertを使用して検出しやすくします。
CollectionAssert クラスは、主に下位互換性のために保持されます。
使用可能な API は次のとおりです。
- CollectionAssert.AllItemsAreInstancesOfType
- CollectionAssert.AllItemsAreNotNull
- CollectionAssert.AllItemsAreUnique
- CollectionAssert.AreEqual
- CollectionAssert.AreEquivalent
- CollectionAssert.AreNotEqual
- CollectionAssert.AreNotEquivalent
- CollectionAssert.Contains
- CollectionAssert.DoesNotContain
- CollectionAssert.IsNotSubsetOf
- CollectionAssert.IsSubsetOf
ベスト プラクティス
特定のアサーションを使用する: エラー メッセージを改善するために、
AreEqualよりもIsTrue(a == b)を優先します。わかりやすいメッセージを含める: 明確なアサーション メッセージを使用して、エラーをすばやく特定するのに役立ちます。
一度に 1 つのことをテストする: 各テスト メソッドでは、1 つの動作を検証する必要があります。
Throws/ThrowsExactlyを使用する例外の場合: MSTest v3.8 以降では、Assert.Throws属性よりも、Assert.ThrowsExactly、ThrowsAsync、および非同期の対応する (ThrowsExactlyAsync、ExpectedException) を優先します。AssertStringAssert/よりも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 ブロック内のアサートを回避します。
こちらも参照ください
.NET