次の方法で共有


IntelliTest を使用してファジー テスト用の単体テストを生成する

IntelliTest では、.NET コードを調べてテスト データと一連の単体テストを生成します。 コード内のすべてのステートメントに対して、そのステートメントを実行するテスト入力が生成されます。 ケース分析は、コード内のすべての条件分岐に対して実行されます。 たとえば、 if ステートメント、アサーション、例外をスローできるすべての操作が分析されます。 この分析は、各メソッドのパラメーター化された単体テストのテスト データを生成するために使用され、コード カバレッジの高い単体テストが作成されます。 これは、すべてのロジックブランチを実行し、例外を検出するために入力とテストケースを最適化する、高度なファズテストと考えてください。

IntelliTest を実行すると、失敗しているテストを簡単に確認し、修正するために必要なコードを追加できます。 生成されたテストのうち、回帰スイートを提供するためにテスト プロジェクトに保存するテストを選択できます。 コードを変更したら、IntelliTest を再実行して、生成されたテストをコードの変更と同期させます。

IntelliTest は Visual Studio 2026 では非推奨です。 Visual Studio 2022 では、IntelliTest は .NET Framework でのみサポートされており、Visual Studio Enterprise に限定されています。 .NET 6 のサポートは、プレビュー バージョンのみに制限されていました。

Visual Studio 2022 では、IntelliTest は .NET Framework でのみサポートされており、Visual Studio Enterprise に限定されています。 .NET 6 のサポートは、プレビュー バージョンのみに制限されていました。

可用性と拡張機能

[ IntelliTest の作成 ] および [ IntelliTest の実行 ] メニュー コマンド:

  • Visual Studio の Enterprise Edition でのみ使用できます。

  • .NET Framework を対象とする C# コードのみをサポートします。

  • 拡張可能であり、MSTest、MSTest V2、NUnit、xUnit 形式でのテストの出力をサポートします。

  • x64 構成をサポートしていません (プレビュー バージョンが必要)。

探索: IntelliTest を使用してコードを探索し、単体テストを生成する

単体テストを生成するには、型がパブリックである必要があります。

  1. Visual Studio でソリューションを開き、テストするメソッドを含むクラス ファイルを開きます。

  2. メソッドを右クリックし、[ IntelliTest の実行 ] を選択して、メソッド内のコードの単体テストを生成します。

    単体テストを生成するメソッドを右クリックするスクリーンショット。

    単体テストを生成するメソッドを右クリックするスクリーンショット。

    IntelliTest は、さまざまな入力でコードを何度も実行します。 各実行は、入力テスト データと結果の出力または例外を示す表に表示されます。

    [探索結果] ウィンドウのスクリーンショット。

    [探索結果] ウィンドウのスクリーンショット。

クラス内のすべてのパブリック メソッドの単体テストを生成するには、特定のメソッドではなくクラスを右クリックし、[ IntelliTest の実行] を選択します。 [ 探索結果 ] ウィンドウのドロップダウン リストを使用して、クラス内の各メソッドの単体テストと入力データを表示します。

一覧から表示するテスト結果のスクリーンショット。

一覧から表示するテスト結果のスクリーンショット。

合格したテストの場合は、結果列で報告された結果がコードに対する期待値と一致することを確認します。 失敗したテストの場合は、必要に応じてコードを修正します。 その後、IntelliTest を再実行して修正プログラムを検証します。

永続化: 単体テストを回帰スイートとして保存する

  1. パラメーター化された単体テストを使用してテスト プロジェクトに保存するデータ行を選択します。

    テスト結果の保存のスクリーンショット。

    テスト結果の保存のスクリーンショット。

    テスト プロジェクトと、作成されたパラメーター化された単体テストを表示できます。各行に対応する個々の単体テストは、テスト プロジェクトの .g.cs ファイルに保存され、パラメーター化された単体テストは対応する .cs ファイルに保存されます。 手動で作成した単体テストの場合と同様に、単体テストを実行し、テスト エクスプローラーから結果を表示できます。

    ソリューション エクスプローラーで保存されたテストのスクリーンショット。

    ソリューション エクスプローラーで保存されたテストのスクリーンショット。

    必要な参照もテスト プロジェクトに追加されます。

    メソッド コードが変更された場合は、IntelliTest を再実行して、単体テストと変更の同期を維持します。

支援: IntelliTest を使用してコード探索に集中する

  1. より複雑なコードがある場合は、IntelliTest を使用してコードの探索に集中できます。 たとえば、パラメーターとしてインターフェイスを持つメソッドがあり、そのインターフェイスを実装するクラスが複数ある場合、IntelliTest はこれらのクラスを検出し、警告を報告します。

    警告を表示して、実行する内容を決定します。

    [警告の表示] のスクリーンショット。

    [警告の表示] のスクリーンショット。

  2. コードを調査し、テストする内容を理解したら、警告を修正して、インターフェイスのテストに使用するクラスを選択できます。

    [警告の修正] のスクリーンショット。

    [警告の修正] のスクリーンショット。

    この選択は 、PexAssemblyInfo.cs ファイルに追加されます。

    [assembly: PexUseType(typeof(Camera))]

  3. IntelliTest を再実行して、修正したクラスを使用するだけで、パラメーター化された単体テストとテスト データを生成できるようになりました。

    修正後に IntelliTest を再実行するのスクリーンショット。

    修正後に IntelliTest を再実行するのスクリーンショット。

指定: IntelliTest を使用して、コードで指定した正確性プロパティを検証する

生成された単体テストで検証する入力と出力の一般的な関係を指定します。 この仕様は、テスト メソッドのように見えるが、汎用的に定量化されるメソッドにカプセル化されています。 これはパラメーター化されたユニットテストメソッドであり、IntelliTest が生成可能なすべての入力値に対してあなたが行うどのアサーションも成立する必要があります。

Q&A(質疑応答)

Q: アンマネージ コードに IntelliTest を使用できますか?

ある: いいえ。IntelliTest はマネージド コードでのみ機能します。

Q: 生成されたテストが合格または失敗するタイミング

A: 例外が発生しなければ、通常どおり単体テストに通過します。 アサーションが失敗した場合、またはテスト対象のコードがハンドルされていない例外をスローした場合、プログラムは失敗します。

特定の例外がスローされた場合に合格できるテストがある場合は、テスト メソッド、テスト クラス、またはアセンブリ レベルでの要件に基づいて、次のいずれかの属性を設定できます。

  • PexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

Q: パラメーター化された単体テストに前提条件を追加できますか?

A: はい、前提条件を使用して特定のメソッドの単体テストに必要ないテストデータを指定します。 PexAssume クラスを使用して、前提条件を追加します。 たとえば、次のように、 lengths 変数が null ではないという前提を追加できます。

PexAssume.IsNotNull(lengths);

前提条件を追加して IntelliTest を再実行すると、関連しなくなったテスト データは削除されます。

Q: パラメーター化された単体テストにアサーションを追加できますか?

ある: はい。IntelliTest は、単体テストを実行するときに、ステートメントでアサートしているものが実際に正しいことを確認します。 PexAssert クラスまたはテスト フレームワークに付属するアサーション API を使用してアサーションを追加します。 たとえば、2 つの変数が等しいアサーションを追加できます。

PexAssert.AreEqual(a, b);

アサーションを追加して IntelliTest を再実行すると、アサーションが有効であることが確認され、有効でない場合はテストが失敗します。

Q: 最初に IntelliTest を実行せずに、パラメーター化された単体テストを生成できますか。

ある: はい。クラスまたはメソッドを右クリックし、[ IntelliTest の作成] を選択します。

IntelliTest の作成のスクリーンショット。

IntelliTest の作成のスクリーンショット。

既定の形式をそのまま使用してテストを生成するか、プロジェクトとテストの名前付け方法を変更します。 新しいテスト プロジェクトを作成することも、既存のプロジェクトにテストを保存することもできます。

MSTest の既定値を使用した IntelliTest の作成のスクリーンショット。

MSTest の既定値を使用した IntelliTest の作成のスクリーンショット。

Q: IntelliTest で他の単体テスト フレームワークを使用できますか?

ある: はい。次の手順に従って 、他のフレームワークを見つけてインストールします。 テスト フレームワーク拡張機能は、 たとえば、NUnit テスト ジェネレーターなど、Visual Studio Marketplace でも使用できます。

Visual Studio を再起動してソリューションを再度開いた後、クラスまたはメソッドを右クリックし、[ IntelliTest の作成] を選択します。 ここでインストールされているフレームワークを選択します。

IntelliTest の他の単体テスト フレームワークの選択のスクリーンショット。

IntelliTest の他の単体テスト フレームワークの選択のスクリーンショット。

次に、IntelliTest を実行して、対応する.g.cs ファイルに個別の単体テスト 生成します。

Q: テストの生成方法について詳しく知ることができますか?

ある: はい。概要を確認するには、この ブログ記事をお読みください。