問題タブ [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.
pex - Pex 単体テストの実行中に「パスの境界を超えました」
サンプル プログラムで Pex 単体テストを生成しようとしています。でウェブページを作成しましたDefault.aspx
。ここで、ファイルを開き、default.aspx.cs
以下のコードを分離コードに追加しました。
ここで、ファイル内を右クリックし、[ default.aspx.cs
Run Pex] をクリックしました。Pex の探索結果で、「パスの境界を超えました」というメッセージが表示されます。
理解できません – これはどういう意味ですか? また、単体テストに合格するにはどうすればよいですか?
pex - Pexテストフレームワークでのカスタムオブジェクトの使用
プロジェクトのテストにPexとMolesのテストフレームワークを使用しようとしています。
パラメータ化されたテストにPexを使用するという小さな考えがあります。
これらの種類のメソッドのテストを行う方法は?
ありがとうアシュワニ
moles - ファイルが別のプロセスによって使用されているため、プロセスはファイルにアクセスできません
Moles固有の質問なので、この質問をします。Windows 7 64 ビットで VS2010 を実行すると、モルの VsHost がタスク マネージャーに残り、次のメッセージが表示されます。
ファイルをコピーできません 別のプロセスによって使用されているため、プロセスはファイルにアクセスできません
解決策:タスク マネージャーでプロセスMicrosoft.Moles.VsHost.x86.exeを強制終了します。
これを非常に頻繁に行うのは非常に面倒です。msdn ソーシャル フォーラムで、この問題はいつか修正されるだろうと読みました (投稿は 2010 年のものだったと思いますが、投稿が見つかりません)。
これは、テストのデバッグを停止するたびに、またはデバッグ中にエラーが発生した場合にほぼ毎回発生します。
この問題について何か新しいことはありますか?
私はこの Typemocking がとても気に入っているので、Moles がいつか Visual Studio の標準の一部になることを切に願っています。
c# - Moles を使用して、EntityFramework 4.1 でデータベースのクエリから DbContext をモレるにはどうすればよいですか?
データベース アクセスに Entity Framework 4.1 を使用しており、次のコードを単体テストしたいと考えています。
Moles を使用してデータベースの依存関係を掘り下げていますが、行き詰まっています。Entity Framework のどのポイントから始めるべきか。
私はこの例に従っていましたが、これは LINQ-To-SQL 用です。
データベースへの呼び出しが行われる前に、どの関数をインターセプトするかを把握するために、Entity Framework をデバッグ/トレースすることも考えていました。ただし、Entity Framework 4.1 でトレースできるソース コードはないようです。ディスカッションを参照してください。
EmployeeProfiles のリストを取得できるように、DbContext でどの関数をモルアウトする必要があるかを誰かに案内してもらえますか?
moles - 選択したタイプは表示されず、Pex で実行できません
Pex 1.4.40602.0 を実行しています。内部型で Pex を実行しようとすると、「The selected type is not visible and cannot be run by Pex.」というエラー ダイアログが表示されます。Assembly.cs ファイルに次のコマンドを配置しようとしましたが、すべて役立たず:
この点で何か助けていただければ幸いです....
moles - Moles Generation - 異なる名前空間の同じクラス名
この質問はもともとここで尋ねられました: http://social.msdn.microsoft.com/Forums/en-US/pex/thread/60972f1f-735a-474e-be84-40cda8006ffa?prof=required。
最近、VS2010 用の Moles をインストールしました。同じクラス (同じ名前) を持つが、名前空間が異なるアセンブリがあります。Moles は、これらのクラスの MClassName と MClassName01 などを生成することで、これを解決しています。これはローカルでうまく機能します。しかし、他の誰かが最新バージョンを取得すると、モグラが再生成され、MClassName だったものが MClassName01 になり、MClassName01 だったものが MClassName になり、すべての単体テストが再度修正されるまでビルドが失敗します。これは、誰かが最新バージョンを入手するたびに行うのは受け入れられません。解決策を提案してください。
当時の回答は、2010 年 12 月のリリースで修正される既知のバグであるというものでした。この問題は 0.94.51023.0 でまだ見られます。これはリグレッションですか、それともバグは修正されていませんか?
ありがとう
c# - Moles とコードのリファクタリング
私たちは私の会社で新しいグリーンフィールド プロジェクトに着手しており、単体テストでのすべてのモックに Microsoft の Moles フレームワークを使用することが決定されました。私のマネージャーは、理想的には、NSubstitute や Moq などの他のモッキング フレームワークを導入してプロジェクトを複雑にしたくありません。しかし、Moles がモックとスタブを生成する性質上、リファクタリング ツールではうまく機能しないことがわかりました。
たとえば、resharper を使用すると、次のインターフェイスがあれば、モルは次のようなスタブを生成します。
IMyInterface -> SIMyInterface
ここで、IMyInterface を次のような別の名前にリファクタリングする場合: IMyNewInterface
次に、私の単体テストでは、基本的に別の名前を持っているため、Stub クラスは明らかにリファクタリングされません。
単体テストの順列が多くなると、これが大きな問題になることがわかります。リファクタリングは悪夢になり、マントラは「何も変更しないでください!」になります。
Moles を処理できるリファクタリング ツールを知っている、または同様の経験がある人はいますか?
マーリンとマイクの両方に感謝します。私のチームは、妥協して、標準ツールではモックできない型にのみ Moles を使用し、それ以外は NSubstitute などの別のフレームワークを使用することにしました。
c# - 具体的な実装を持つ抽象クラスをスタブしないように Pex に指示する方法
Pex を使用してコードをテストしようとしています。4 つの具体的な実装を持つ抽象クラスがあります。4 つの具体的な型のそれぞれに対してファクトリ メソッドを作成しました。この素晴らしいスレッドが説明しているように、Pex は抽象ファクトリ メソッドを使用せず、また使用すべきでもありません。
問題は、コードの一部が 4 つの具象型すべてに依存していることです (それ以上のサブクラスが作成される可能性は非常に低いため) が、Pex は Moles を使用してスタブを作成することでコードを壊しています。
その抽象クラスの Moles スタブを作成せずに、Pex にファクトリ メソッドの 1 つ (どれでも構いません) を使用させて抽象クラスのインスタンスを作成させるにはどうすればよいですか? PexAssume
これを達成するディレクティブはありますか?一部の具体的な型はツリー構造の型を形成することに注意してください。たとえば、ConcreteImplementation
は から派生しAbstractClass
、ConcreteImplementation
型の 2 つのプロパティを持ちますAbstractClass
。ツリーのどこにもスタブがまったく使用されていないことを確認する必要があります。(すべての具体的な実装にAbstractClass
プロパティがあるわけではありません。)
編集:
クラス構造自体がどのように機能するかについて、さらに情報を追加する必要があるようですが、目標は依然として、Pex がクラスをスタブ化しないようにする方法であることを忘れないでください。
以下は、抽象基本クラスの簡略化されたバージョンと、その 4 つの具体的な実装です。
私がテストしようとしているのはDistill
メソッドであり、ご覧のとおり、再帰的に実行できる可能性があります。このパラダイムではスタブAbstractClass
は意味がないため、アルゴリズムのロジックが壊れます。スタブ化されたクラスをテストしようとしても、例外をスローするか、それがImplementation1
. そのような特定のテスト フレームワークに対応するためにテスト対象のコードを書き直す必要はありませんが、スタブを作成しないようにテスト自体を作成することが、AbstractClass
ここで行おうとしていることです。
たとえば、私が行っていることがタイプセーフな列挙型構造とどのように異なるかが明らかであることを願っています。また、ここに投稿するためにオブジェクトを匿名化しました (ご覧のとおり)。すべてのメソッドを含めたわけではImplementation4.Equals(Implementation4)
ありません。ここで壊れていますが、実際のコードで問題が解決されます。
別の編集:
これは、ファクトリ クラスの 1 つの例です。これは、Pex で生成されたテスト プロジェクトの Factory ディレクトリにあります。
これらの具象実装のファクトリ メソッドでは、任意のコンストラクタを使用して具象実装を作成できます。この例では、useEmptyConstructor
パラメーターは使用するコンストラクターを制御します。他のファクトリ メソッドにも同様の機能があります。リンクをすぐに見つけることはできませんが、これらのファクトリメソッドを使用すると、可能なすべての構成でオブジェクトを作成できるようにする必要があることを読んだことを思い出します。
visual-studio-2010 - Pex Explorations を実行すると、以前に Pex で生成されたテスト メソッドが無視されるのはなぜですか?
テスト中のコード:
テスト プロジェクトの Pex メソッド:
で初めて "Pex Explorations" を実行CheckValidFileWithPex(string content)
すると、次の値で 5 つのテスト メソッドが生成されますcontent
。
- ヌル
- ""
- "\0\0\0\0"
- "テスト"
- "\0\0\0\0\0"
ただし、「Pex Explorations」を再度実行すると、2 回目の実行前に、生成されたテスト、既存のテスト プロジェクト コード、またはメイン プロジェクトに変更が加えられていない場合、4 つのテストのみが生成済みとしてリストされ、項目 3 からのテスト入力 ("\ 0\0\0\0")がありません。
Pex で生成されたテスト ファイルのソース コードには、このケースのテスト メソッドがまだ含まれていますが、なぜこのケースが Pex Exploration Results に記載されていないのかわかりません。
あなたの洞察に感謝します。