問題タブ [hamcrest]
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.
java - IsIterableContainingInOrder Hamcrestマッチャーが配列で機能しないのはなぜですか?
を使用するだけでなく、Hamcrestを使用しIsIterableContainingInOrder
てリストの同等性を検証する方法について明らかに混乱してい.equals()
ます。ハムクレストの有益なメッセージをレポートに表示したいと思います。
以下のテストがコンパイルすらできないのはなぜですか?それらのいくつかは、少なくとも私にとっては、他のものよりも直感に反しています。タイプパラメータは、varargsシグネチャを持つメソッドに渡すものに推測されるため、Tの配列をTのvarargsと見なし、Tに基づいてMatcherを生成するという一般原則が得られます。 Tの配列、Tの反復可能、またはそのようなもの。
最も直感的な行のいくつかが実際にコンパイルすらできない理由について、説明を使用できます。
特に:
- 図3と図4は、配列/リストの非対称性を示しています。
- 5と6は、配列ではなくリストで検索できることを示しています(?)
そのようにマークされた行のコンパイラ警告は、私にはさらに不思議です。
驚愕の量。:(
PS私は、すべての驚きが私自身の無知から来ていることを理解しています。ジェネリックス、型推論、varargsなどをブラッシュアップする必要があります。これについては完全な説明を使用できます。今後数回参照することになるでしょう。
PPS私は最初にコードを読み込もうとしましたが、少しの間それを見てください...;)心のフェイントではありません:
java - 非推奨の Hamcrest メソッド is() を使用する代わりに何ができますか?
現在、次のコードを使用して値をアサートしていboolean
ますが、このメソッドorg.hamcrest.Matchers.is()
は非推奨です。
assertTrue()
「java.lang.AssertionError」のような貧弱な失敗メッセージが表示される、頼らずにブール値をテストするための簡単な代替構文はありますか
コメント/回答を受け取った後に編集する
私の最初の懸念は、Eclipse が次のインポート ステートメントを非推奨として示しているために発生しました。
Hamcrest APIドキュメントを見ると、メソッドのオーバーロードされた 3 つのバリエーションがあり、そのis()
うちの 1 つだけが非推奨です。
したがって、@mark からのコメントと @matt からの回答を明確にするために、is()
上記で投稿した使用は有効であり、非推奨ではありません。
java - 間を使用したハムクレスト数の比較
ハムクレストに数値範囲内の数値を比較する方法はありますか?私はこのようなものを探しています:
java - JUnit Matcher#startsWithの宣言はどこにありますか?
私はjunitExpectedExceptions
のjavadocを閲覧していましたが、それらの例のがどこから来ているのか理解できませんstartsWith
(コードでここにマークされています)。CoreMatcher
ユーティリティクラスを確認しましたが、静的startsWith
メソッドが見つかりませんでした。
そのメソッドはどこにありますか?
(私は明らかにそれを自分で書くことができますが、それは重要ではありません)
java - ジェネリック地獄: メソッド パラメーターとしての hamcrest マッチャー
それでは、文字列のリストと、Hamcrest マッチャーを受け取りmatches()
、提供されたマッチャーのメソッドの結果を返す関数を用意しましょう。
ここまでは順調ですね。今、私は簡単に呼び出すことができます:
...これらのファクトリ静的メソッドはすべて、メソッド シグネチャに適合するマッチャーを生成するためMatcher<? super List<String>>
です。
ただし、オブジェクトの Iterable を受け入れるマッチャーもmatchIt()
メソッドで受け入れられるべきだと思います。
だから私は単純にmatchIt()
メソッドの署名を変更しました:
しかし、それはまったく機能しません。を受け入れないだけでなくeveryItem(anything())
、以前の正しいeveryItem(equalToIgnoringCase("item"))
ことわざ (1.7.0_05 コンパイラ バージョン)も受け入れません。
何?ここで何が問題なのですか?matchIt()
メソッドの署名ですか、それともeveryItem()
Hamcrest の署名が間違って設計されていますか? それとも、Java ジェネリック システムが修復不可能なだけなのでしょうか? コメントありがとうございます!
EDIT @rlegendi ここでの私の意図は、クライアントがリストに関する述語を追加および実行するためのインターフェースを提供することです。それがmatchIt()
方法です。このシナリオでは、呼び出しmatchIt(anything())
が理にかなっています。クライアントは、リストが何かであるかどうかを知りたがっています。呼び出しmatchIt(empty())
は、クライアントがリストが空かどうかを知りたがっていることを意味します。matchIt(everyItem(equalToIgnoringCase("item")))
との場合はその逆ですmatchIt(hasItem("item"))
。
ここでの私の目標は、可能な限り最良の matchIt()
メソッド シグネチャを作成することです。これMatcher<? super List<String>>
までのすべてのシナリオで問題なく動作します。ただし、クライアントMatcher<Iterable<Object>>
もマッチャーを追加できるようにする必要があると思います (たとえばmatchIt(everyItem(notNullValue())
、ここでは完全に理にかなっています。クライアントは、リストのすべての String 項目が null でないかどうかを知りたいと考えています)。
ただし、正しい署名が見つからないため、matchIt(Matcher<? super List<? super String>>)
機能しませんeveryItem(notNullValue());
Hamcrest 1.3 を使用しています。
編集2:
私は根本的な誤解を見つけたと思います。
everyItem(anything())
式はタイプ のオブジェクトを返しますMatcher<Iterable<Object>>
。だから簡単にできるMatcher<Iterable<Object>> m = everyItem(anything());
しかし、私が理解していないのは、なぜ私ができないのかということですMatcher<? super List<? super String>> m1 = m;
。そうでMatcher<Iterable<Object>>
はないようですがMatcher<? super List<? super String>>
、理由はわかりません。
私もできませんMatcher<? super List<?>> m1 = m;
。Matcher<Iterable<Object>>
ではありませんMatcher<? super List<?>>
か?なんで?
scala - 仕様2:ハムクレストマッチャーを使用する
Javaで記述されたドメインオブジェクト用のさまざまなHamcrestマッチャーがあります。私は今Scalaに移動しており、specs2テストのコンテキストでこれらの既存のマッチャーを再利用したいと思います。
クラスFooのHamcrestマッチャーを考えると:
このように使用できるようにしたいと思います。
等々。
Specs2には反対の、Matcher [T]トレイトのorg.hamcrest.Matcherへのアダプターがあるようですが、私はその逆を探しています。
何か案は?
java - リストをフィルタリングするためにhamcrestmatcher(hasItemsInArray)でlambdajを使用する方法
lambdajを介してベンダー配列にあるcaroffersオブジェクトのリストをフィルタリングしようとしています。しかし、以下のコードは機能しません。空のリストを取得しています。
以下のコードが機能します。equalToだけが私のために働くようです。
私を助けてください。
java - IDEA、Hamcrestおよび静的インポート
私のMavenプロジェクトには
私がタイプするときassertThat
..
IDEAに次のことが必要であることを理解してもらいたい
代わりに私はこれを手に入れます。
これはどのように修正できますか?IDEAに静的インポートを実行させるにはどうすればよいですか?
arrays - コレクション内のすべてのアイテムが範囲内にあると断言する方法
ランダムな整数値のセット数を取得する Groovy 配列があります。そして、配列内の各項目が指定された範囲内の値を持つことを主張したいと思います。Hamcrest Matchers を使用しようとしています。したがって、私のテストは次のようになります。
テストを実行すると、assertionError が発生します
これのいくつかのバリエーションを試しましたが、合格テストを受けていません。エラーの "But:was" 部分を見るだけで、6 つの値すべてが要件を満たしていることがわかりますが、テストは失敗します。
私は Groovy や Hamcrest を長い間使用していないので、何かが欠けていると確信しています。ありがとう
java - アサーションは null であるか、特定のクラスのインスタンスです
シンプルに思った
したがって、next() が NULL または Double のインスタンスのいずれかを返すようにしたいと思います。みたいな
テスト実行 ( assertThat
) の結果は...
なんで?そして、どのように修正するのですか?
編集
おっしゃる通り、Mockito からの hamcrest lib との衝突がありました。私はそれを修正しました。エラーはありませんが、アサーションが奇妙に失敗します。見てください:
Null が予期されていましたが、null を取得し、テストが失敗しています。