IntelliTest でのコードの単体テストの生成Generate unit tests for your code with IntelliTest

IntelliTest はテスト データおよび単体テストのスイートを生成するために .NET コードを確認します。IntelliTest explores your .NET code to generate test data and a suite of unit tests. コードにある各ステートメントについて、そのステートメントを実行するテスト入力が生成されます。For every statement in the code, a test input is generated that will execute that statement. コード内の各条件付き分岐について、ケース分析が実行されます。A case analysis is performed for every conditional branch in the code. たとえば、if ステートメント、アサーション、および例外をスローするすべての操作が分析されます。For example, if statements, assertions, and all operations that can throw exceptions are analyzed. この分析は、各メソッドのパラメーター化された単体テストのためにテスト データを生成し、高いコード カバレッジを持つ単体テストを作成するために使用されます。This analysis is used to generate test data for a parameterized unit test for each of your methods, creating unit tests with high code coverage.

IntelliTest を実行すると、どのテストが失敗しているかを簡単に把握し、必要なコードを追加して修正できます。When you run IntelliTest, you can easily see which tests are failing and add any necessary code to fix them. 回帰スイートを提供するために、生成されたどのテストをテスト プロジェクトに保存するかを選択できます。You can select which of the generated tests to save into a test project to provide a regression suite. コードを変更する際に、IntelliTest を再実行して、生成されたテストとコードの変更を同期させます。As you change your code, rerun IntelliTest to keep the generated tests in sync with your code changes.

可用性と拡張機能Availability and extensions

[IntelliTest の作成] および [IntelliTest の実行] メニュー コマンドは次のとおりです。The Create IntelliTest and Run IntelliTest menu commands:

  • Visual Studio 2015 以降の Enterprise Edition でのみ使うことができます。Are available in only the Enterprise Edition of Visual Studio 2015 and later.

  • .NET Framework を対象とする C# コードのみをサポートします。Support only C# code that targets the .NET Framework.

  • 拡張可能であり、MSTest、MSTest V2、NUnit、xUnit 形式でのテストの発行をサポートします。Are extensible, and support emitting tests in MSTest, MSTest V2, NUnit, xUnit format.

  • x64 の構成はサポートしません。Do not support x64 configuration.

探索: IntelliTest を使用してコードを確認し、単体テストを生成するExplore: Use IntelliTest to explore your code and generate unit tests

単体テストを生成するには、パブリック型でなければなりません。To generate unit tests, your types must be public. そうでない場合は、 単体テストを作成 してから生成する必要があります。Otherwise, create unit tests first before you generate them.

  1. Visual Studio でソリューションを開きます。Open your solution in Visual Studio. 次に、テストするメソッドが含まれるクラス ファイルを開きます。Then open the class file that has methods you want to test.

  2. コード内のメソッドを右クリックして [IntelliTest の実行] を選択し、メソッドにあるすべてのコード パスに対する単体テストを生成します。Right-click in a method in your code and choose Run IntelliTest to generate unit tests for the code in your method.

    メソッドを右クリックして単体テストを生成Right-click in your method to generate unit tests

    IntelliTest は、異なる入力でコードを何度も実行します。IntelliTest runs your code many times with different inputs. それぞれの実行は、表の入力テスト データおよび結果出力または例外で示されます。Each run is represented in the table showing the input test data and the resulting output or exception.

    [精査結果] ウィンドウでのテスト表示Exploration Results window is displayed with tests

    クラス内のすべてのパブリック メソッドに対して単体テストを生成するには、特定のメソッドではなく、クラスで右クリックします。To generate unit tests for all the public methods in a class, simply right-click in the class rather than a specific method. その後、 [IntelliTest の実行] を選択します。Then choose Run IntelliTest. [精査結果] ウィンドウにあるドロップダウン リストを使用して、クラス内の各メソッドの単体テストと入力データを表示します。Use the drop-down list in the Exploration Results window to display the unit tests and the input data for each method in the class.

    表示するテスト結果をリストから選択Select the test results to view from the list

    合格したテストについて、結果列に報告されている結果が、コードに対する予想と一致していることを確認します。For tests that pass, check that the reported results in the result column match your expectations for your code. テストが失敗した場合は、必要に応じてコードを修正します。For tests that fail, fix your code as appropriate. IntelliTest を再実行して、修正を検証します。Then rerun IntelliTest to validate the fixes.

持続: 単体テストを回帰スイートとして保存Persist: Save the unit tests as a regression suite

  1. パラメーター化された単体テストでテスト プロジェクトに保存するデータの行を選択します。Select the data rows that you want to save with the parameterized unit test into a test project.

    テストを選択して右クリックした後、[保存] を選択Select tests; right-click and choose Save

    テスト プロジェクトと作成されたパラメーター化された単体テストを表示できます。各行に対応する個々の単体テストはテスト プロジェクトの .g.cs ファイルに保存され、パラメーター化された単体テストは対応する .cs ファイルに保存されます。You can view the test project and the parameterized unit test that has been created - the individual unit tests, corresponding to each of the rows, are saved in the .g.cs file in the test project, and a parameterized unit test is saved in its corresponding .cs file. 単体テストは、テスト エクスプローラーから実行してその結果を表示することができます。これは、手動で作成する他の単体テストと同様です。You can run the unit tests and view the results from Test Explorer just as you would for any unit tests that you created manually.

    クラス ファイルのテスト メソッドの部分を開き、単体テストを表示Open class file in test method to view unit test

    その他の必要な参照もテスト プロジェクトに追加されます。Any necessary references are also added to the test project.

    メソッド コードが変更された場合、IntelliTest を再実行して単体テストを変更と同期させます。If the method code changes, rerun IntelliTest to keep the unit tests in sync with the changes.

支援: IntelliTest を使用してコードの探索に重点を置くAssist: Use IntelliTest to focus code exploration

  1. コードが複雑な場合、IntelliTest は、コードの探索に重点を置いて支援します。If you have more complex code, IntelliTest assists you with focusing exploration of your code. たとえば、パラメーターとしてインターフェイスを持つメソッドがあり、複数のクラスがそのインターフェイスを実装している場合であれば、IntelliTest はそれらのクラスを発見して警告を報告します。For example, if you have a method that has an interface as a parameter, and there is more than one class that implements that interface, IntelliTest discovers those classes and reports a warning.

    警告を表示してその後の行動を決めます。View the warnings to decide what you want to do.

    警告を表示View warnings

  2. コードを調査して何をテストするか理解した後、警告を修正して、インターフェイスをテストするためにどのクラスを使用するかを選択できます。After you investigate the code and understand what you want to test, you can fix the warning to choose which classes to use to test the interface.

    警告を右クリックして [修正] を選択Right-click the warning and choose Fix

    この選択は PexAssemblyInfo.cs ファイルに追加されます。This choice is added into the PexAssemblyInfo.cs file.

    [assembly: PexUseType(typeof(Camera))]

  3. これで IntelliTest を再実行して、修正したクラスだけを使用してパラメーター化された単体テストとテスト データを生成できます。Now you can rerun IntelliTest to generate a parameterized unit test and test data just using the class that you fixed.

    IntelliTest を再実行してテスト データを生成するRerun IntelliTest to generate the test data

指定: コードで指定した正確性プロパティを検証するために IntelliTest を使用するSpecify: Use IntelliTest to validate correctness properties that you specify in code

生成された単体テストで検証する入力と出力の一般的な関係を指定します。Specify the general relationship between inputs and outputs that you want the generated unit tests to validate. この指定は、テスト メソッドのようになりますが、汎用的に定量化されたメソッドにカプセル化されます。This specification is encapsulated in a method that looks like a test method but is universally quantified. これは、パラメーター化された単体テスト メソッドであり、IntelliTest で生成されるすべての可能な入力値に対して任意のアサーションを保持する必要があります。This is the parameterized unit test method, and any assertions you make must hold for all possible input values that IntelliTest can generate.

Q: アンマネージ コードに IntelliTest を使用できますか。Q: Can you use IntelliTest for unmanaged code?

A: いいえ。IntelliTest はマネージ コードでのみ動作します。A: No, IntelliTest only works with managed code.

Q: 生成されたテストはどのような場合に合格または失敗しますか。Q: When does a generated test pass or fail?

A: 他の単体テストと同様に、例外が発生しなければ合格します。A: It passes like any other unit test if no exceptions occur. アサーションが失敗した場合、またはテスト対象のコードがハンドルされない例外をスローした場合には失敗します。It fails if any assertion fails, or if the code under test throws an unhandled exception.

特定の例外がスローされても合格するテストがある場合、テスト メソッド、テスト クラス、またはアセンブリ レベルの要件に基づいて、次のいずれかの属性を設定できます。If you have a test that can pass if certain exceptions are thrown, you can set one of the following attributes based on your requirements at the test method, test class or assembly level:

  • PexAllowedExceptionAttributePexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttributePexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttributePexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttributePexAllowedExceptionFromAssemblyAttribute

Q: パラメーター化された単体テストに前提事項を追加できますか。Q: Can I add assumptions to the parameterized unit test?

A: はい。前提事項は、特定のメソッドの単体テストに、どのテスト データが必要ないかを指定するために使用します。A: Yes, use assumptions to specify which test data is not required for the unit test for a specific method. PexAssume クラスを使用して前提事項を追加します。Use the PexAssume class to add assumptions. たとえば、長さの変数が NULL ではないという前提事項は次のように追加します。For example, you can add an assumption that the lengths variable is not null like this.

PexAssume.IsNotNull(lengths);

前提事項を追加して IntelliTest を再実行した場合、関係ないテスト データは取り除かれます。If you add an assumption and rerun IntelliTest, the test data that is no longer relevant will be removed.

Q: パラメーター化された単体テストにアサーションを追加できますか。Q: Can I add assertions to the parameterized unit test?

A: はい。IntelliTest のプロセスは、単体テストを実行するときにステートメント内のアサートの対象が正しいことを確認します。A: Yes, IntelliTest will check that what you are asserting in your statement is in fact correct when it runs the unit tests. テスト フレームワークに付属する PexAssert クラスまたはアサーション API を使用してアサーションを追加します。Use the PexAssert class or the assertion API that comes with the test framework to add assertions. たとえば、2 つの変数が等しいというアサーションを追加できます。For example, you can add an assertion that two variables are equal.

PexAssert.AreEqual(a, b);

アサーションを追加して IntelliTest を再実行すると、アサーションが有効であることを確認し、有効でない場合はテストに失敗します。If you add an assertion and rerun IntelliTest, it will check that your assertion is valid and the test fails if it is not.

Q: IntelliTest を最初に実行しなくてもパラメーター化された単体テストを生成することはできますか。Q: Can I generate parameterized unit tests without running IntelliTest first?

A: はい。それには、クラスまたはメソッドを右クリックして [IntelliTest の作成] を選択します。A: Yes, right-click in the class or method, then choose Create IntelliTest.

エディターを右クリックし、[IntelliTest の作成] を選択するRight-click editor, choose Create IntelliTest

テスト生成時の既定の形式を受け入れるか、プロジェクトまたはテストの名前付け方法を変更します。Accept the default format to generate your tests, or change how your project and tests are named. 新しいテスト プロジェクトを作成するか、既存のプロジェクトにテストを保存することができます。You can create a new test project or save your tests to an existing project.

MSTest の既定値を使用して IntelliTest を作成するCreate IntelliTest with MSTest default

Q: IntelliTest で他の単体テスト フレームワークを使用することはできますか。Q: Can I use other unit test frameworks with IntelliTest?

A: はい。以下の手順に従って、 他のフレームワークを検索してインストールしてください。A: Yes, follow these steps to find and install other frameworks. テスト フレームワークの拡張機能は Visual Studio Marketplace でも手に入ります。Test framework extensions are also available in Visual Studio Marketplace:

その後、Visual Studio を再起動し、ソリューションを再度開いてクラスまたはメソッドを右クリックし、 [IntelliTest の作成] を選択します。After you restart Visual Studio and reopen your solution, right-click in the class or method, then choose Create IntelliTest. インストールしたフレームワークを選択します。Select your installed framework here:

IntelliTest の他の単体テスト フレームワークを選択するSelect other unit test framework for IntelliTest

これで、IntelliTest を実行すると、個々の単体テストが対応する g.cs ファイル内に生成されます。Then run IntelliTest to generate individual unit tests in their corresponding .g.cs files.

Q: テストの生成方法に関してさらに調べることができますか。Q: Can I learn more about how the tests are generated?

A: はい。概要については、この ブログ投稿を読んでください。A: Yes, to get a high-level overview, read this blog post.