タグ付けされた質問 「assert」

アサーションはステートメントであり、falseと評価されたときにプログラムを中止します。アサートは通常、デバッグおよび発生してはならない状況に使用されます。

17
アサーションはいつプロダクションコードに残すべきですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4ヶ月前に閉鎖。 この質問を改善する comp.lang.c ++。moderatedで、C ++ではデフォルトでデバッグビルドにのみ存在するアサーションを本番用コードに保持する必要があるかどうかについての議論があります。 明らかに、各プロジェクトは一意であるため、ここでの私の質問は、アサーションを保持する必要があるかどうかについてはそれほどではありませんが、その場合、これは推奨できる/良いアイデアではありません。 アサーションとは、次のことを意味します。 falseの場合にソフトウェアのバグを明らかにする条件をテストするランタイムチェック。 プログラムを停止するメカニズム(多分本当に最小限のクリーンアップ作業の後)。 私は必ずしもCやC ++について話しているわけではありません。 私自身の意見では、プログラマーであるがデータを所有していない場合(ほとんどの商用デスクトップアプリケーションの場合)、失敗したアサーションはバグを示しているので、データを保持する必要があります。バグが発生すると、ユーザーのデータが破損するおそれがあります。これにより、出荷前に強力なテストが必要になり、バグがより見やすくなり、発見および修正が容易になります。 あなたの意見や経験は何ですか? 乾杯、 カール ここで関連する質問を参照してください 応答と更新 グラハムさん、 アサーションはエラーであり、純粋で単純であるため、アサーションは同じように処理する必要があります。エラーはリリースモードで処理する必要があるため、アサーションは実際には必要ありません。 そのため、私は主張について話すときに「バグ」という言葉を好む。それは物事をより明確にします。私にとって、「エラー」という言葉は曖昧すぎます。欠落しているファイルはエラーではなくバグであり、プログラムはそれを処理する必要があります。nullポインタを逆参照しようとするのはバグであり、プログラムは何かが悪いチーズのようなにおいがすることを認めるべきです。 したがって、ポインタをアサーションでテストする必要がありますが、ファイルの存在は通常のエラー処理コードでテストします。 少し話題外ですが、議論の重要なポイントです。 ヘッドアップとして、失敗したときにアサーションがデバッガーに侵入した場合は、なぜそうしないのか。しかし、完全にコードの制御外にあるファイルが存在できなかった理由はたくさんあります:読み取り/書き込み権限、ディスクがいっぱい、USBデバイスが抜かれているなど。あなたはそれを制御できないため、アサーションはこれに対処する正しい方法ではありません。 カール トーマス、 はい、私はコードコンプリートを持っています。その特定のアドバイスに強く同意しないと言わなければなりません。 カスタムメモリアロケータが失敗し、他のオブジェクトがまだ使用しているメモリのチャンクをゼロにするとします。私はたまたま、このオブジェクトが定期的に逆参照するポインターをゼロにします。不変条件の1つは、このポインターがnullになることはないということです。ポインタが突然nullになった場合はどうしますか。あなたはちょうどそれの周りにif()、それがうまくいくことを望んでいますか? ここでは製品コードについて話しているので、デバッガーに侵入したり、ローカル状態を検査したりする必要はありません。これはユーザーのマシンの実際のバグです。 カール
166 assert 


5
NUnit Assert.ThrowsメソッドまたはExpectedException属性を使用しますか?
これらが例外をテストする2つの主な方法であると思われることを発見しました。 Assert.Throws<Exception>(()=>MethodThatThrows()); [ExpectedException(typeof(Exception))] これらのうちどれが最良でしょうか?一方が他方よりも優れている点はありますか?それとも単に個人的な好みの問題ですか?




14
アサーションまたは例外を使用して契約で設計しますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する コントラクトでプログラミングするとき、関数またはメソッドは、その前提条件が満たされているかどうかを最初にチェックしてから、その責任に取り組み始めますよね?これらのチェックを行う最も重要な2つの方法は、assertとによるものexceptionです。 アサートはデバッグモードでのみ失敗します。個別のすべての契約の前提条件を(ユニット)テストして、実際に失敗するかどうかを確認することが重要であることを確認するには デバッグおよびリリースモードで例外が失敗します。これには、テストされたデバッグ動作がリリース動作と同じであるという利点がありますが、実行時のパフォーマンスが低下します。 どちらが望ましいと思いますか? ここで関連する質問を参照してください


5
かっこ付き/なしのPythonアサート
次に、assertの4つの簡単な呼び出しを示します。 >>> assert 1==2 Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError >>> assert 1==2, "hi" Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError: hi >>> assert(1==2) Traceback (most recent call last): File "<stdin>", line 1, in ? AssertionError >>> assert(1==2, "hi") …


5
C ++の悪い習慣でassert()を使用していますか?
リリースビルドのパフォーマンスに影響を与えずにデバッグを容易にするために、C ++コードに多くのアサーションを追加する傾向があります。これassertは、C ++メカニズムを考慮せずに設計された純粋なCマクロです。 一方、C ++はを定義しますstd::logic_error。これは、プログラムのロジック(したがって、名前)にエラーがある場合にスローされることを意図しています。インスタンスをスローすることは、の代わりに、C ++に代わる完璧な方法になる可能性がありますassert。 問題はassert、abort両方ともデストラクタを呼び出さずにプログラムをすぐに終了するため、クリーンアップをスキップするのに対し、例外を手動でスローすると、不要な実行時コストが追加されることです。これを回避する1つの方法は、独自のアサーションマクロを作成することです。これはSAFE_ASSERT、Cの対応物と同じように機能しますが、失敗すると例外をスローします。 この問題について3つの意見を考えることができます。 Cの主張に固執する。プログラムはすぐに終了するので、変更が正しく展開されるかどうかは問題ではありません。また、#defineC ++でsを使用することも同様に悪いことです。 例外をスローし、main()でキャッチします。コードがプログラムのどの状態でもデストラクタをスキップできるようにすることは悪い習慣であり、すべての犠牲を払って回避する必要があります。また、terminate()の呼び出しも同様です。例外がスローされた場合は、キャッチする必要があります。 例外をスローし、プログラムを終了させます。 プログラムを終了する例外は問題ありNDEBUGません。これにより、リリースビルドではこれが発生することはありません。キャッチは不要であり、内部コードの実装の詳細をに公開しmain()ます。 この問題に対する明確な答えはありますか?専門的な参考資料はありますか? 編集:デストラクタのスキップは、もちろん、未定義の動作ではありません。

6
Pythonでアサーションを無効にする
Наэтотвопросестьответынаスタックオーバーフローнарусском:Естьливозможностьотключитьアサート? Pythonでアサーションを無効にするにはどうすればよいですか? つまり、アサーションが失敗した場合、アサーションがスローするのAssertionErrorではなく、続行する必要があります。 それ、どうやったら出来るの?


8
PHPコードでassertを使用する必要がありますか?
同僚が、ライブラリ内のifステートメントを使用して例外をスローした場所にassertコマンドを数回追加しました。(私はこれまでアサートについて聞いたことがありませんでした。)これは彼がそれをどのように使用したかの例です: assert('isset($this->records); /* Records must be set before this is called. */'); 私はしただろう: if (!isset($this->records)) { throw new Exception('Records must be set before this is called'); } assertに関するPHPのドキュメントを読むと、assertを使用する前に、assertがアクティブであることを確認し、ハンドラーを追加することをお勧めします。彼がこれをした場所が見つかりません。 だから、私の質問は、上記のことを考えると、assertを使用するのは良い考えですか?ifや例外の代わりにもっと頻繁に使用する必要がありますか? また、これらのライブラリは、私たちが参加していない可能性のあるプロジェクトも含め、さまざまなプロジェクトやサーバーで使用することを計画しています(ライブラリはオープンソースです)。これはassertの使用に違いはありますか?
87 php  assert 

3
Django TestCaseのアサーションメソッドリストはどこにありますか?[閉まっている]
現在のところ、この質問は私たちのQ&A形式には適していません。回答は事実、参考資料、または専門知識によって裏付けられることを期待していますが、この質問は、討論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善して再開できると思われる場合は、ヘルプセンターにアクセスしてガイダンスを入手してください。 7年前に閉鎖されました。 私はグーグルでassertメソッドのリストを見つけました。しかし、このドキュメントは非常によく隠されているようです。誰かがそれがどこにあるか知っていますか?
87 django  testing  assert 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.