Ruby で assert を使用することは完全に有効だと思います。しかし、あなたは2つの異なることに言及しています:
- xUnit フレームワークは
assert
、テストの期待値をチェックするメソッドを使用します。これらは、アプリケーション コードではなく、テスト コードで使用することを目的としています。
- C、Java、Python などの一部の言語には
assert
、プログラムのコード内で使用することを目的とした構造が含まれており、整合性に関する仮定をチェックします。これらのチェックは、コード自体の内部に組み込まれています。それらはテスト時のユーティリティではなく、開発時のユーティリティです。
私は最近 solid_assert を書きました: Ruby アサーション ユーティリティを実装する小さな Ruby ライブラリと、その動機を説明する私のブログへの投稿.. 次の形式で式を記述できます。
assert some_string != "some value"
assert clients.empty?, "Isn't the clients list empty?"
invariant "Lists with different sizes?" do
one_variable = calculate_some_value
other_variable = calculate_some_other_value
one_variable > other_variable
end
また、非アクティブ化して空のステートメントとして評価することもできassert
ますinvariant
。これにより、本番環境でのパフォーマンスの問題を回避できます。ただし、実用的なプログラマーは、それらを非アクティブ化しないことを推奨していることに注意してください。それらが実際にパフォーマンスに影響を与える場合にのみ、それらを無効にする必要があります。
慣用的な Ruby のやり方は通常のステートメントを使用しているという回答についてはraise
、表現力に欠けると思います。アサーティブ プログラミングの黄金律の 1 つは、通常の例外処理にアサーションを使用しないことです。それらは2つの完全に異なるものです。この 2 つに同じ構文を使用すると、コードがわかりにくくなると思います。そしてもちろん、それらを無効にする機能は失われます。
The Pragmatic Programmer From Journeyman to MasterとCode Completeのような 2 つの必読の古典的な本では、アサーションのセクション全体がアサーションに捧げられ、その使用が推奨されているため、アサーションを使用することは良いことであると確信できます。アサーティブ プログラミングとは何か、いつそれを使用するかを非常によく説明している、アサーションを使用したプログラミングというタイトルの素晴らしい記事もあります (これは Java に基づいていますが、概念はどの言語にも当てはまります)。