web-dev-qa-db-ja.com

.NET単体テストの自動生成

単体テスト生成などというものはありますか?もしそうなら...

...うまくいきますか?

.... NETで利用できる自動生成ソリューションは何ですか?

...このようなテクノロジーの使用例はありますか?

...これは特定の種類のアプリケーションにのみ有効ですか、それとも手動で作成されたすべての単体テストを置き換えるために使用できますか?

40
Phobis

Pex を見てください。そのマイクロソフトの研究プロジェクト。ウェブサイトから:

Pexは、動的なシンボリック実行に基づく自動化された探索的テストを通じて、手書きのパラメーター化された単体テストから単体テストを生成します。

2019年の更新:

コメントで述べたように、Pexは IntelliTest と呼ばれ、Visual Studio Enterprise Editionの機能です。 MSTest、MSTest V2、NUnit、およびxUnit形式のテストの発行をサポートし、他のユニットテストフレームワークで使用できるように拡張可能です。

ただし、次の警告に注意してください。

  • .NET FrameworkをターゲットとするC#コードのみをサポートします。
  • X64構成はサポートしていません。
  • Visual Studioで利用可能Enterprise Editionのみ
32
Paul Batum

TDDに関する限り、ユニットテストの生成には意味がないと思います。

単体テストは、(開発者として)設計と仕様に関して順調に進んでいることを確認するためにのみ行います。テストの自動生成を開始すると、その目的が失われます。確かに、それはおそらく100%のコードカバレッジを意味しますが、そのカバレッジは無意味で空です。

自動化された単体テストは、戦略がテスト後であることも意味します。これは、TDDのテスト前の原則とは逆です。繰り返しますが、TDDはテストに関するものではありません。

そうは言っても、MSTestには自動ユニットテスト生成ツールがあると思います-VS2005でそれを使用することができました。

18
Jon Limjap

2017年に更新:

nit Test Boilerplate Generator は、VS 2015-2017で機能し、維持されています。宣伝どおりに動作するようです。

16
N1ghtv1s1on

'ErrorUnit'を作成し、一時停止したVisual StudioまたはエラーログからMSTestまたはNUnitユニットテストを生成します。これまでのモッククラス変数、メソッドパラメータ、EFデータアクセス。 ( http://ErrorUnit.com

ユニットテストジェネレーターがすべてを行うことはできません。単体テストは、古典的には、配置、動作、および表明の3つの部分に分かれています。配置部分は単体テストの最大の部分であり、テストのすべての前提条件を設定し、テストで実行されるすべてのデータを模擬します。ユニットテストの動作部分は通常1行でアクティブになりますテスト対象のコードの一部がそのデータを渡し、最後にテストのAssert部分がAct部分の結果を受け取り、それが期待どおりかどうかを検証します(エラーがないことを確認するだけの場合は、ゼロ行になることがあります)。

ユニットテストジェネレーターは通常、ユニットテストの作成で「配置」と「行為」の部分のみを実行できます。ただし、ユニットテストジェネレーターは、何が正しいのか、何が間違っているのかをユーザーだけが知っているので、通常、「アサート」部分を記述しません。そのため、完全を期すために、単体テストを手動で入力/拡張する必要があります。

2
johng

私はジョンに同意します。自動ファズテストのような特定のタイプのテストは、自動生成の恩恵を受けます。単体テストフレームワークの機能を使用してこれを達成することはできますが、これは優れた単体テストカバレッジに関連する目標を達成するものではありません。

2
tshak

Parasoft .TEST は、テスト生成の機能を備えています。テストの説明とアサーションの評価にNUnitフレームワークを使用します。

自動生成シナリオ(入力の構築とテスト済みメソッドの呼び出し)と現在のコードベースの動作に基づくアサーションの作成により、回帰テストスイートを準備することができます。その後、テスト対象のコードベースが進化した後、アサーションはリグレッションを示すか、簡単に再度記録できます。

1
zuraff

私はこのスレッドが古いことを知っていますが、すべての開発者のために、ユニットテストジェネレーターと呼ばれる優れたライブラリがあります。

https://visualstudiogallery.msdn.Microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7

良い開発者

0
Bouam

GennyMcGenFace は、クラスの各関数の単体テストを作成し、各パラメーターにランダムな単語/値を持つオブジェクトを生成します。

  • クラスの各関数の単体テストを生成する
  • パラメータ入力とリターンステートメントのランダムに生成された有効な値を計算します。
  • モック可能なインターフェースはランダムに生成された有効な値を返します
  • クラスの各関数の単体テストを生成する
  • 必要なすべての名前空間をテストクラスにインポートします

特に、たくさんのパラメーターを持つ入力オブジェクトがある場合、単体テストのセットアップに役立ちます。

単体テストは次のようになります 

JUnitテストクラスを自動的に生成するAgitarOne(www.agitar.com)と呼ばれる商用製品があります。
私はそれを使用したことがないので、それがどれほど有用であるかについてコメントすることはできませんが、私がJavaプロジェクトを実行していた場合、私はそれを見ていたでしょう。

.netに相当するものは知りません(Agitarが.netバージョンを発表しましたが、AFAIKはそれを実現しませんでした)。

0
Rikalous

私は NStub を使用して、クラスのテストをスタブアウトしました。それはかなりうまくいきます。

0
Hector Sosa Jr

ツールを使用してテストケースを生成しました。私はそれがより高いレベルのエンドユーザー指向のテストにうまく機能すると思います。純粋な単体テストよりも、ユーザー受け入れテストの一部であるもの。

この受け入れテストには単体テストツールを使用します。それはうまくいきます。

テストケースを構築するためのツール を参照してください。

0
S.Lott