[解決済み] ScalaTestでカスタム失敗メッセージを表示するには?
2023-03-03 14:07:11
質問
ScalaTestでカスタム失敗メッセージを表示する方法をご存知の方はいらっしゃいますか?
例えば、以下のような感じです。
NumberOfElements() should equal (5)
失敗したときに以下のようなメッセージを表示します。
10は5と同じではありません。
しかし、私はもっと説明的なメッセージが欲しいのです。
<ブロッククオートNumberOfElementsは5であるべきです。
どのように解決するのですか?
このような機能を求めているのはあなたが初めてです。これを実現する一つの方法は、withClueを使うことです。のようなものです。
withClue("NumberOfElements: ") { NumberOfElements() should be (5) }
これで、このようなエラーメッセージが表示されるはずです。
NumberOfElements: 10は5と等しくありません
メッセージを完全に制御したい場合は、カスタムマッチャーを書くことができます。あるいは、このようにアサーションを使うこともできます。
assert(NumberOfElements() == 5, "NumberOfElements should be 5")
どのようなユースケースなのか、詳しく教えてください。10が5にならなかったのはなぜか、また、このようなニーズはどの程度の頻度であったのか。
リクエストの種類はこんな感じです。
scala> import org.scalatest.matchers.ShouldMatchers._
import org.scalatest.matchers.ShouldMatchers._
scala> withClue ("Hi:") { 1 + 1 should equal (3) }
org.scalatest.TestFailedException: Hi: 2 did not equal 3
at org.scalatest.matchers.Matchers$class.newTestFailedException(Matchers.scala:150)
at org.scalatest.matchers.ShouldMatchers$.newTestFailedException(ShouldMatchers.scala:2331)
scala> class AssertionHolder(f: => Any) {
| def withMessage(s: String) {
| withClue(s) { f }
| }
| }
defined class AssertionHolder
scala> implicit def convertAssertion(f: => Any) = new AssertionHolder(f)
convertAssertion: (f: => Any)AssertionHolder
scala> { 1 + 1 should equal (3) } withMessage ("Ho:")
org.scalatest.TestFailedException: Ho: 2 did not equal 3
at org.scalatest.matchers.Matchers$class.newTestFailedException(Matchers.scala:150)
at org.scalatest.matchers.ShouldMatchers$.newTestFailedException(ShouldMatchers.scala:2331)
このように書けばいいんですね。
{ NumberOfElements() should be (5) } withMessage ("NumberOfElements:")
関連
-
[解決済み] RDDの内容を印刷するには?
-
[解決済み] Scalaの配列の初期化
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Apache SparkでDataframeのカラム値をListとして抽出する。
-
[解決済み] Scalaです。ScalaのコレクションにおけるTraversableとIterableの違いは何ですか?
-
[解決済み] Scalaの自動リソース管理にはどのようなものがありますか?
-
[解決済み] SBTのrunアクションでアプリケーションを実行するために、JVMの最大ヒープサイズを"-Xmx "で指定する方法は?
-
[解決済み] 関数型プログラミング(特にScalaとScala API)におけるreduceとfoldLeft/foldの違いとは?
-
[解決済み] Scala Mapのキーと値の両方をマッピングする
-
[解決済み] 上位互換型はどんなときに役立つのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 述語で配列を2つに分割するには?
-
[解決済み] SBTが終了せずに実行を停止する
-
[解決済み] Scala の private と protected コンストラクタ
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] build.sbtとbuild.scalaの違いは何ですか?
-
[解決済み] Scalaでリストを2つのフィールドでソートするには?
-
[解決済み] Scalaのcaseクラスを宣言することのデメリットは何ですか?
-
[解決済み] Scalaで、リストから重複を取り除くにはどうしたらいいですか?
-
[解決済み] SBTの正しい使い方を教えてください。
-
[解決済み] フォールドの早期中止