問題タブ [pex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - HostType("Moles") を使用した単体テストのアサートが、個別に実行すると成功するのに、テストのグループで実行すると失敗するのはなぜですか?
私は最近、静的、非仮想、封印などの多くの要素を含むいくつかのロジックをテストするために、Pex & Moles の時流に乗りました。最近、いくつかのテストから説明できない動作を見始めました。 .
私がスタブ化したインターフェイスのいくつかのメソッドは void を返すため、スタブをデリゲートに設定し、ブール変数を更新してそれらが呼び出されたことを示します。これが私がやっていることです:
何らかの理由で、このテストを単独で実行すると、上記のアサートは成功します。しかし、(Visual Studio の [ソリューション内のすべてのテストを実行] 機能を使用して) アセンブリ内の他のすべてのテストと共にテストを実行すると、最初のアサートが失敗します。
この問題が発生する理由と、問題を解決するために何を変更する必要があるかを知りたいです。
c++ - Visual C++ の Pex に最も近いものは何ですか?
Pex は、C# コードの単体テストを自動的に生成します。
C++ コードに似たもの (無料または商用) はありますか?
pex - Pex (アカデミック ライセンス) の 64 ビット バージョンはありますか?
Pex のアカデミック ライセンスは 32 ビット版のみのようです。
64ビット版はありますか?
generics - Pex はどのようにジェネリックを処理できますか?
Pex はどのようにジェネリックを処理できますか?
moq - Pex と Moq は連携して動作しますか?
誰もこれを試しましたか?
私はmoqが好きで、pexがしていることは好きですが、一緒に試したことはありません. ほとんどの場合、ほくろよりもmoqを使用したいと思いますが、誰かが障害にぶつかったかどうかを知りたいですか?
彼らはいいプレーをしますか?
pex - Pex: 特定の条件下で例外が予想されることをパラメータ化されたテストで示す方法は?
Pex を使い始めたばかりで、タイトルに記載されている問題に直面しています。Pex によって生成された、または手動で追加されたパラメーター化されたテストは、例外が発生する原因となる入力に対して失敗するテスト ケースを作成するようです。特定の入力で例外が発生し、特定のテストが失敗しないようにする方法はありますか?
unit-testing - Pex、Contracts、およびQuickGraphを使用したFalse Negative Unit Test
みんな。私は契約、ペックス、クイックグラフの間で困惑する相互作用を持っており、より知識のある人からのアドバイスに非常に感謝しています。1つの契約をコメントアウトするとフォールスネガティブがなくなるという再現ケースに要約しましたが、サブジェクトコード(クイックグラフ)のプロパティに副作用があるため、許可された時間内にデバッガーで診断できませんでした- gettersは、プロパティの値を表示するときにデバッガーが副作用を実行し、実際の実行順序を妨げることを意味します。
最初に少し背景を説明し、次に詳細を説明し、次にダウンロードして試してみるプロジェクトへのポインタを紹介します。
Pex&Molesをインストールしました
http://research.microsoft.com/en-us/projects/pex/downloads.aspx
およびCodeContractsfor.NET 4.0
http://research.microsoft.com/en-us/projects/contracts/
nugetを介して、すべて.NET3.5用に構築された最新バージョンのQuickGraphをダウンロードしました。私はそれを必要最小限に剪定し、すべてのプロジェクトプロパティに移動し、それらすべてを.NET3.5クライアントプロファイルから.NET4.0に更新し、1つのソースを壊す変更を修正しました(これは些細なことであり、私の接続がほとんどない可能性があります)問題)。次に、すべてのプロジェクトページの[コードコントラクト]タブに移動し、すべての静的および動的オプションを有効にしました。
http://quickgraph.codeplex.com/releases/view/55262
プロジェクトには192の単体テストがあり、その多くはPexで生成されています(非常に素晴らしいです!)。テストを実行するには、プロジェクトのzipファイルを次の場所から取得します。
http://dl.dropbox.com/u/1997638/QuickGraph.zip
上記のリンクからPex&MolesとContractsがあることを確認してください。ソリューションを開き、すべてを再構築してから、ソリューションレベルで、「ソリューションですべてのテストを実行」(control-R、A)を実行します。すべて合格します。次に、IImplicitUndirectedGraphContracts.csの49行目に移動し、大きなコメント(私が挿入)の下でコントラクトのコメントを解除します。1つのテスト、Prim12240WithDelegateは失敗します。
このテストでは、EdgesとEdgeCountのプロパティゲッターでユーザー指定のデリゲートを呼び出すことにより、オンザフライでエッジを構築するグラフコンストラクターを実行します。かわいい。しかし、IImplicitUndirecteGraphContracts.csの49行目のコントラクトに問題があります。
この契約をコメントアウトすると、テストに合格するため、これはフォールスネガティブです。デバッガーでこれを追跡しようとすると、プロパティゲッターでのエッジの作成のタイミングと関係があります。私はこれを解きほぐすことができませんでしたが、デバッガーがこれらのゲッターを呼び出し、サブジェクトコードがそれらを呼び出し、コントラクトコードがそれらを呼び出すため、おそらく静的に、おそらく動的に、私はそれに従うことを試みて迷子になり、私は思った契約執行の詳細を私よりよく理解している人に質問を投げかけます。
これが問題のある契約です。コメントアウトすると、単体テストが成功します。
c# - コード コントラクトの失敗例 Graph.Remove(Edge e)
コード コントラクトで装飾した簡単なグラフ操作メソッドを次に示します。
ensure クレームは証明されませんが、理由がわかりません! Remove() を呼び出した後、エッジがエッジ リストにないか、結果が false であると主張していると思います。結果が true の場合、グラフの状態については何も主張しません。静的チェッカーはそれを気に入らず、Pex にその方法を教えてもらっていません (ただし、おそらく使い方がわからないだけです)。
この例ではロックは無関係だと思いますが、念のためそのままにしておきます。また、OnRemoveEdge のデリゲートには何の保証もありませんが、ここでは、Graph コードに再入可能ではないと暗黙的に仮定します。その上、仮定はその後です。
更新: コードを変更して、イベント ハンドラー OnRemoveEdge() (ただし、デリゲート OnBeforeRemoveEdge は除く) をロックから外しました。しかし、これは、スレッドに関連するコントラクトの前提に対して何をするのでしょうか? コード コントラクトはシングル スレッド モデルを想定していますか? うーん。
.net - Prism 複合アプリケーションでの Microsoft Pex の使用
Prism 複合アプリケーションに単体テストを実装し、このタスクを高速化するために Microsoft Pex ( http://research.microsoft.com/en-us/projects/pex/ ) を実装しようとしています。しかし、私は Prism に関連する多くのトラブルを経験しています。Moles を使用して Prism の実装をスタブ化していますが、多くのエラーや問題が発生しています。
Prism アプリケーションで Pex を使用して成功した人はいますか?
回答ありがとうございます
c# - Run Pex と組み合わせた PUT での PexAssert.Throws
テスト対象のクラスのメソッドを呼び出す PUT を作成し、それに属性を付けるとPexMethod
、「Run Pex」はこのメソッドを使用して、自動生成されたテストを作成します。
これは、メソッドの呼び出しが PUT の本体に直接含まれている場合にのみ機能します。
サンプル:
この PUT は、「Run Pex」によって使用されます。
この PUT は「Run Pex」では使用されません。
メソッドを呼び出すと、パラメーターに関係なく、常にこの例外がスローされることを示したいと思います。
これを達成する方法は?
マイクロソフトの公式 Pex フォーラムで1 週間前にその質問をしましたが、回答が 1 つもなかったので、ここで 2 回投稿します。
問題は次のように再現できます。
- 1 つのメソッドを持つ 1 つのクラスを持つ 1 つのプロジェクトで単純なソリューションを用意します。
- そのメソッドを右クリックし、[Run Pex] を選択します。
- Pex 探索結果で、任意のエントリを右クリックし、[テストを保存...] を選択します。2 つの関連ファイルを含む新しいテスト プロジェクトが作成されます:
<class-name>Test.cs
と<class-name>Test.<MethodName>.g.cs
. 最初のファイルには PUT があり、2 番目のファイルには特定のテスト メソッドがあり、Pex が選択するパラメーターごとに 1 つです。最初のファイルに PUT があるメソッドに対して pex を実行するたびに、2 番目のファイルが自動的に再作成されます。 - テスト プロジェクトを右クリックし、[Pex] -> [生成された単体テストの削除] を選択します。これにより、2 番目のファイルから特定のテストが削除されます。
- PUT を含むファイルに移動し、PUT の名前を任意の名前に変更します。
- ポイント 1 からメソッドに戻り、再度右クリックして [Run Pex] を選択します。
- Pex は、「Test..g.cs.」という名前のテスト プロジェクトに新しいファイルを作成します。名前を変更しましたが、以前と同じ PUT を使用します。
- 名前はそのままにして、内容を PexAssert.Throws を使用した 2 番目の例に変更して、PUT を再度変更します。
- 再度、テスト プロジェクトを右クリックし、[Pex] -> [生成された単体テストの削除] を選択します。
- ここでも、ポイント 1 のメソッドを右クリックし、[Run Pex] を選択します。
- テスト プロジェクトの両方の *.g.cs ファイルを開くと、テストがないことがわかります。これは、Pex が PUT を使用しなかったことを意味します。それが問題です:)