問題タブ [mspec]
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.
visual-studio-2010 - ReSharper5.xおよびVS2010を使用してファイル内のすべてのテストを実行します
R#(5.x)テストランナーに現在のファイルのすべてのMSpec仕様を実行するように指示する方法はありますか?
VisualStudioテストランナーのCtrl+++ショートカットのようなものが、ショートカットであれコンテキストメニューコマンドであれ、私が求めているものです。RCtrlT
unit-testing - MSpec で It アサーションを使用してメッセージを出力する方法
以前に MbUnit を使用した後、単体テストにMSpecを使用しています。
言い慣れてる
つまり、失敗した場合に出力されるアサーションにメッセージを追加します。
MSpec に対応する機能が見つかりません。一部の XML が検証されることをテストしており、失敗した場合は、検証エラー メッセージを報告したいと考えています。だから私のMSpecコードは次のようになります
message
しかし、失敗した場合にテスト出力に追加できるようにしたいと考えていShouldBeTrue()
ます。
これは可能ですか?
asp.net-mvc - Moqを使用した予期しない検証動作
Moqは、私の最新のプロジェクトに少し夢中になっています。最近バージョン4.0.10827にアップグレードしましたが、新しい動作のように見えることに気づきました。
基本的に、テストしているコードでモック関数(MakeCall
この例では)を呼び出すと、オブジェクト(TestClass
)を渡します。私がテストしているコードはTestClass
、の呼び出しの前後にオブジェクトに変更を加えますMakeCall
。コードが完成したら、MoqのVerify
関数を呼び出します。私の期待は、MoqがMakeCall
、おそらくディープクローニングのようなメカニズムを介して、私が渡した完全なオブジェクトを記録することです。MakeCall
このようにして、呼び出されることを期待している正確なオブジェクトで呼び出されたことを確認できます。残念ながら、これは私が見ているものではありません。
私はこれを以下のコードで説明しようとしています(うまくいけば、プロセスの中で少し明確にします)。
- まず、新しい
TestClass
オブジェクトを作成します。そのVar
プロパティはに設定され"one"
ます。 mockedObject
次に、テスト対象である モックオブジェクトを作成します。MakeCall
次に、のメソッドを呼び出しますmockedObject
(ちなみに、例で使用されているMachine.Specificationsフレームワークでは、When_Testing
クラス内のコードを上から下に読み取ることができます)。TestClass
次に、モックされたオブジェクトをテストして、Var
値が。で実際に呼び出されたことを確認します"one"
。予想通り、これは成功します。- 次に、プロパティをに
TestClass
再割り当てして、元のオブジェクトに変更を加えます。Var
"two"
- 次に、Moqが値が.のaで
MakeCall
呼び出されたとまだ考えているかどうかを確認します。私はそれが真実であると期待していますが、これは失敗します。TestClass
"one"
- 最後に、Moq
MakeCall
が実際TestClass
に値が。のオブジェクトによって呼び出されたと見なすかどうかをテストします"two"
。これは成功しますが、最初は失敗すると予想していました。
Moqが元のTestClass
オブジェクトへの参照のみを保持していることは明らかであり、その値を免責で変更することができ、テストの結果に悪影響を及ぼします。
テストコードに関するいくつかの注意事項。 IMyMockedInterface
私が嘲笑しているインターフェースです。 は私がメソッドTestClass
に渡しているクラスであるため、私が抱えている問題を示すために使用しています。MakeCall
最後にWhen_Testing
、テストコードを含む実際のテストクラスです。Machine.Specificationsフレームワークを使用しているため、奇妙な項目がいくつかあります('Because of'、'It should ...')。これらは、テストを実行するためにフレームワークによって呼び出される単なるデリゲートです。それらは簡単に削除でき、必要に応じて、含まれているコードを標準関数に配置する必要があります。すべてを許可するので、この形式のままにしましたValidate
完了するための呼び出し(「アレンジ、アサーションの実行」パラダイムと比較して)。明確にするために、以下のコードは私が問題を抱えている実際のコードではありません。私はこれと同じ振る舞いを複数の場所で見たので、単に問題を説明することを目的としています。
これに関していくつか質問があります:
これは予想される動作ですか?
これは新しい動作ですか?
私が気付いていない回避策はありますか?
ベリファイを間違って使用していますか?
この状況を回避するためにMoqを使用するより良い方法はありますか?
何卒よろしくお願い申し上げます。
編集:
これは私がこの問題を経験した実際のテストとSUTコードの1つです。うまくいけば、それは説明として機能します。
teamcity - TeamCity で MSpec テストをビルドする
TeamCity をセットアップしようとしています。最初はいろいろ問題がありましたが、試行錯誤の末、無事にビルドすることができました。そのため、ソリューションの縮小バージョンを取得して正常にビルドできることを知っています。
しかし、問題だった項目の 1 つは、私の MSpec テストでした。MSpec テスト プロジェクトをビルドするようにソリューションを構成すると、次のエラーが発生します。
Areas\Manufacturing\Controllers\DashboardControllerSpecs.cs(7, 30): エラー CS0234: タイプまたは名前空間名 'Hosts' が名前空間 'CompanyName.ApplicationName' に存在しません (アセンブリ参照がありませんか?)
実際には、ローカル マシン上では「正常に」ビルドされますが、たまたまローカル マシン上にあるビルド サーバー上では、上記のエラーが発生します。
私は何が間違っているのでしょうか?私が間違っていることを見つけるためにチェックすべきことは何ですか?
teamcity - TeamCityがテストアセンブリを間違って構築しているため、MSpecテストを実行できません
ソリューションのビルドに続いてMSpecテストを実行しようとしています。したがって、MSBuildスクリプトを次のように設定しました。
次に、TeamCityのターゲットとして「TeamCity」と呼びます。コマンドが
"mspec.exe .. \ Hosts \ MyApplication.Hosts.Web.Specs \ bin \ MyApplication.Hosts.Web.Specs.dll --teamcity"
を実行すると、次のエラーが発生します。
C:\ TeamCity \ buildAgent \ work \ 117e3aa3bb76aad0 \ Build> mspec .. \ Hosts \ Application.Hos ts.Web.Specs \ bin \Application.Hosts.Web.Specs.dllファイルまたはアセンブリを読み込めませんでした'file:// / C:\ TeamCity \ buildAgent \ work \ 117e3aa3bb7 6aad0 \ Hosts \ Application.Hosts.Web.Specs \ bin \Application.Hosts.Web.Specs.dll'またはその依存関係のe。間違った形式でプログラムをロードしようとしました。
調査を行った結果、ローカルマシンとビルドサーバーの「MyApplication.Hosts.Web.Specs.dll」は、どちらも15kbですが、md5チェックサムが異なることがわかりました。これは、MSpecテストの実行がエラーを引き起こす理由を説明している可能性があります。実際、ローカルマシンからビルドサーバーにdllをコピーすると、テストが実行されます。
だから私の質問は、他の誰かが「ひどく」構築されているアセンブリの構築のこの同じ問題に遭遇したかどうかです。
-編集-ローカルでは、ソリューションを64ビットアプリケーションとして構築していますが、TeamCityでは、32ビット(x86)として構築しています。それが問題でしょうか?
PS:TeamCityで64ビットアプリケーションとしてビルドしようとしましたが、今のところ無視したい他のエラーが発生します。ただし、完全を期すために、ここでは次のようにします。
nant - NCover がアセンブリを無視するのはなぜですか?
TeamCity でビルドを実行するために NAnt を使用しています。ビルドは問題なく実行されています。また、すべてのテストに合格したことも表示されます。NCover がカバレッジ xml ファイルを作成しました。mspec がテストを実行するために使用しているコンポーネントに関する情報はたくさんありますが、私のコードについては何もありません。Html-Report を生成するときに、モジュールが完全に欠落しています。私にとって、これは本当に奇妙です。私を助けることができる人はいますか?
NAnt ターゲット:
unit-testing - mspec と rhino は、予想される例外テストをモックします
私は単体テストにかなり慣れていないため、このケースを適切にテストする方法 (またはテストする必要がある場合) を回避できません。
私はコントローラーメソッド(疑似コード)を持っています:
「_userService」に対する個別のテストがたくさんあります。「CreateUser」メソッドは、新しいユーザーを作成するだけで、何も返さないか、try catch でコントローラー サラウンドにバブルアップして例外を ModelState に追加するエラー (ユーザーが存在するなど) があった場合に例外をスローします。
私が理解していることから、サービスをモックし、それが正しく呼び出されたことをアサートする必要があります (私は assertwascalled 構文を使用します)。
よくわからないのは、ユーザーサービスがエラーをスローしたときにリダイレクトせず、その例外をモデル状態に追加する必要があることをテストする方法です。rhino モックを使用すると、モックをスタブ化できますが、単体テストのブック アートでは、それを避けるようにアドバイスされています。
現在、私のテストでは、手動でモデル エラーを追加し (ユーザー サービスからのものかどうかは気にしません)、エラーが発生した場合にコントローラーが同じビューを返すことをテストします。これは正しい方法ですか?または、_userService をスタブしてエラーをスローし、それがモデル状態に追加されることを確認する別のテストを作成する必要がありますか? それとも、そのケースをテストするべきではありませんか? 私は全体を分析しすぎているように感じます.modelstateを使用したテストはこれを満たすのに十分でしょう...
asp.net-mvc-3 - Asp.net mvc 3 コントローラーのテストの書き込み中に MSpec および基本クラスのテストが失敗する
私は現在、すでに実装されているこのコントローラーの MSpec 仕様をいくつか書いています (はい、「間違った」方法で実行していることはわかっています)。
これは「単純な」問題ですが、何が間違っているのかわかりません。うまくいけば、誰かが私のやり方の誤りを指摘できるでしょう。
私のコントローラーの方法は次のとおりです。
私が抱えている問題は
メソッドは、現在のコントローラー (CompanyHomeController) が定義されている基本クラス (BaseController) で定義されます。
私のスペックは次のとおりです。
テストを実行すると失敗し、次のメッセージが表示されます。
当たり前のように咲いている気がするのですが、なかなか見えません。CompanyHomeController は SUT であるため、BaseController に触れなければならない理由がよくわかりません。後者をスタブする必要がありますか?もしそうなら、なぜですか?
asp.net-mvc-3 - fakeiteasyを使用してHttpContextへの呼び出しを含むコードのMSpecテストを作成するにはどうすればよいですか?
私はひねりを加えてことわざのニッカーを取得しています。この非常に単純なコードの場合:
ビューが返されることを確認し、より適切にページタイトルが正しく設定されていることを確認するために、fakeiteasyを使用してMSpecテストを作成するにはどうすればよいですか?
TIA、
デビッド
bdd - 機能テスト、BDD、TDD に関する混乱
複数のフィールドに入力する必要があるフォームがあります。ただし、必須フィールドは 1 つだけです。ということで、以下の仕様にしました。
これを実装したいのですが、mvccontrib.watin dll のようなものを使用しなければならない機能テストに非常によく似ているため、混乱しています。それは実際に機能テストであるというのは正しいですか?BDD の「間違った」仕様を作成しましたか?