タグ付けされた質問 「unit-testing」

ユニットテストは、ソースコードの個々のユニットをテストして、それらが使用に適しているかどうかを判断する方法です。

2
失敗したテストをどこにプッシュしますか?
GitHubリポジトリのブランチ設定を変更したばかりなので、[次の]ブランチではプルリクエストでCIビルドを渡す必要があります。 テストの失敗について、多くのチームメンバーとの議論が続きました。 コンテキストのために... リポジトリには、リリースがあるときにのみPRされる[master]ブランチがあるため、[master]には、メジャー、マイナー、ホットフィックス、ベータ、アルファ/アルファに関係なく、最後のリリース時点のコードが含まれます。プレリリースビルド。 [次の]ブランチは「デフォルト」ブランチで、「リリース準備完了」コードを保持するつもりです。技術的には、そのブランチはいつでも[マスター]にPRされ、リリースされます。 個々のフォークには独自の開発ブランチがあり、貢献者は[次へ] PRを行います。 自明ではないPRをレビューするとき、貢献者のdevブランチを「レビュー」ブランチにマージし、すぐに修正できるものを見つけたら、変更と新しい(時々失敗する)テストをコミット/プッシュし、PR貢献者の開発ブランチに戻ります。彼らが私の変更をマージするとき、新しい失敗したテストをパスさせてプッシュし、それらのPRが同期します。それからPRを[次へ]にマージします。 しかし、この質問はテストに合格することではなく、失敗するテストに関するものです。 テストに失敗すると、修正する必要があるものが文書化されます。 既知のバグにはテストが記述されている必要があります。これにより、何が機能していないかがわかります。 技術的には、GitHubの問題リスト(バグやクリティカル ラベルに対してフィルター処理されています)も同様です。バグを文書化するために多数の失敗したテストを用意することは良い習慣ですか? [次へ]上の障害のビルドは、私たちがリリースする準備ができていないという意味では...しかし、その後、「リリース用であることは、」ビット子供を持って「準備ができている」のようなものでしょう-あなたは決してならない、非常にこのための準備ができて、何か、どこかで(変数の重要性が)リリースで必然的にうまくいかないでしょう。 したがって、合格したテストを[次へ]にプッシュするだけです。失敗したテストをどこにプッシュしますか?つまり、PR /レビュープロセスの外ですか? たとえば、ユーザーが問題リストに新しいバグを報告し、失敗したテストスイートを作成したい-何をする必要があるか、どこで行うかを指定して、新しい貢献者がピックアップしやすくする最終的にはPRを修正します。 これらの失敗したテストをどこにプッシュすればよいですか?または、失敗したテストをどこかにプッシュすることをお勧めしますか?

2
基本クラスのテストを回避しても大丈夫ですか?
かなり汎用的である必要がある柔軟性/抽象化を与えるために、かなりの量の「メタプログラミング」を持つ基本クラスがあります。 基本クラスの共通メソッドを使用するサブクラスが多数あり、各サブクラスのすべてのケースをカバーする動作指向の単体テストがあります。 基本クラスのテストをスキップしても大丈夫ですか?

4
別のテストのサブセットである単体テストを書くことに価値はありますか?
少し不自然な例を挙げるために、関数が2つの数値を返し、最初の数値が2番目の数値よりも小さいことをテストしたいとします。 def test_length(): result = my_function() assert len(result) == 2 def test_order() a, b = my_function() assert a < b ここで、test_length失敗したtest_order場合も失敗します。を書くのはベストプラクティスtest_lengthですか?それともスキップするのですか? 編集:この状況では、両方のテストは互いにほとんど独立しており、それぞれを単独で実行することも、逆の順序で実行することもできますが、これは問題ではありません。これらの以前の質問はありません 他の関数を使用する関数の機能をどのようにテストする必要がありますか? 統合テストが既にある場合、ユニットテストが必要ですか? あるテストが別のテストのセットアップであるテストをどのように構成するのですか? 単体テスト間の成功の依存関係を管理する方法 上記の複製です。

4
テスト駆動開発を行う方法
アプリケーション開発の経験はたった2年です。この2年間で、開発に対する私のアプローチは次のようになりました。 要件を分析する Identity Coreコンポーネント/オブジェクト、必要な機能、動作、プロセス、およびそれらの制約 クラスの作成、クラス間の関係、オブジェクトの動作と状態の制約 機能を作成し、要件に従って動作上の制約を使用して処理する アプリケーションを手動でテストする 要件の変更によりコンポーネント/機能が変更された場合、アプリケーションを手動でテストします 最近、TDDを紹介し、開発されたコードが存在する強力な理由があり、展開後の問題の多くが軽減されるため、これは開発を行うのに非常に良い方法であると感じました。 しかし、私の問題は、最初にテストを作成できないことです。むしろ、実際にコンポーネントを作成する前に、コンポーネントを特定し、テストを作成しています。私の質問は 私はそれをやっていますか?そうでない場合は、正確に変更する必要があります 書いたテストで十分かどうかを確認する方法はありますか? 1 + 1 = 2に相当する可能性のある非常に単純な機能のテストを記述するのは良い習慣ですか、それとも単なるやりすぎですか? 機能を変更し、それに応じて要件が変更されたかどうかをテストするのは良いですか?

6
フレンドクラスを使用したC ++の単体テストプライベートメソッド
これは議論の余地があることを知っていますが、これが私にとって最良の選択肢であると仮定しましょう。私はこれを行うための実際のテクニックは何なのかと思っています。私が見るアプローチはこれです: 1)テストするメソッドのクラスのフレンドクラスを作成します。 2)friendクラスで、テストされたクラスのプライベートメソッドを呼び出すパブリックメソッドを作成します。 3)friendクラスのパブリックメソッドをテストします。 上記の手順を説明する簡単な例を次に示します。 #include <iostream> class MyClass { friend class MyFriend; // Step 1 private: int plus_two(int a) { return a + 2; } }; class MyFriend { public: MyFriend(MyClass *mc_ptr_1) { MyClass *mc_ptr = mc_ptr_1; } int plus_two(int a) // Step 2 { return mc_ptr->plus_two(a); } private: …

2
統合テストを削除するのに十分な単体テストのカバレッジがあるかどうかを知るにはどうすればよいですか?
私はレガシーシステムで作業しています(つまり、テストなしで作成されたという意味です)。外部から機能をテストする統合テストを作成して、システムの一部をテストしようとしました。 これにより、コードの破損を心配することなく、コードの一部をリファクタリングする自信が得られます。しかし、問題は、これらの統合テストを実行するのに2分以上かかり、数分かかることです。また、それらは維持するのが苦痛です。それらはそれぞれ数千行のコードをカバーしており、そのうちの1つが壊れた場合、その理由をデバッグするのに1時間かかることがあります。 私は最近行ったこれらの機能変更のために多くの単体テストを書いてきましたが、コミットする前に常に新しいデプロイを行い、すべての統合テストを実行します。この時点で、ユニットテストと統合テストの一部がテスト内容と重複していることがわかりました。 統合テストを削除できるように、適切な単体テストが不適切な統合テストを適切にカバーしていることをどのようにして知ることができますか?

4
テストごとに1つのアサーションのみが必要な場合。複数の入力をテストする方法は?
私はいくつかのテストケースを構築しようとしていますが、テストケースごとのアサーションの数を制限するようにしてください。 したがって、私の質問は、複数の入力を持つ関数をテストするための最善の方法は何ですか?たとえば、ユーザーからの文字列を解析し、分数を返す関数があります。文字列は、週、時間、日、および分数"5w6h2d1m"にw, h, d, m対応する形式で指定できます。 「テストルールごとに1つのアサーション」に従う場合、入力のバリエーションごとに複数のテストを作成する必要がありますか?それはばかげているように見えるので、代わりに私は次のようなものを持っています: self.assertEqual(parse_date('5m'), 5) self.assertEqual(parse_date('5h'), 300) self.assertEqual(parse_date('5d') ,7200) self.assertEqual(parse_date('1d4h20m'), 1700) 1つのテストケース。もっと良い方法はありますか?

5
サードパーティのコードとは何ですか?
この質問に触発されたサードパーティライブラリの使用-常にラッパーを使用しますか? 人々が実際にサードパーティのライブラリと見なしているものを知りたかった。 PHPの例: Zendフレームワークを使用してアプリケーションを構築している場合、Zendフレームワークライブラリをサードパーティのコードとして扱う必要がありますか? C#の例: デスクトップアプリケーションを構築している場合、すべての.Netクラスをサードパーティのコードとして扱う必要がありますか? Javaの例: JDKのすべてのライブラリをサードパーティライブラリとして扱う必要がありますか? 一部の人々は、ライブラリが安定していて頻繁に変更されない場合、それをラップする必要はないと言います。ただし、サードパーティのコードに依存するクラスをラップせずにテストする方法はわかりません。

6
コードカバレッジ分析のコードを除外する必要がありますか?
私はいくつかのアプリケーション、主にレガシーなものに取り組んでいます。現在、それらのコードカバレッジは非常に低く、通常は10〜50%です。 数週間以来、Cobertura(現在JaCoCoに移行している場合でも、コードカバレッジツール)のパッケージまたはクラスの除外について、バンガロールチームと頻繁に議論しています(開発の主な部分はインドのオフショアで行われます)。 彼らの視点は次のとおりです。アプリケーションの一部のレイヤーで単体テストを作成しないため(1)、これらのレイヤーはコードカバレッジ測定から単に除外する必要があります。言い換えれば、彼らはテストされているかテストされるべきコードにコードカバレッジ測定値を制限したいのです。 また、複雑なクラスの単体テストで作業する場合、その利点(純粋にコードカバレッジの観点から)は、大規模なアプリケーションでは見過ごされます。コードカバレッジの範囲を縮小すると、この種の作業がより明確になります... このアプローチの興味は、テスト可能であると考えるアプリケーションの部分の現在の状態を示すコードカバレッジ測定を持つことです。 しかし、私の見解では、私たちは何らかの形で数字を偽造しています。このソリューションは、労力をかけずに、より高いレベルのコードカバレッジに到達する簡単な方法です。気になるもう1つの点は、ある週から別の週へのカバレッジの増加を示した場合、この良いニュースが開発者の良い仕事によるものなのか、単に新しい除外によるものなのかをどのように見分けることができますか? さらに、コードカバレッジ測定で何が考慮されているかを正確に知ることはできません。たとえば、コード適用範囲が40%のコードアプリケーションが10,000行ある場合、コードベースの40%がテストされていると推定できます(2)。しかし、除外を設定するとどうなりますか?コードカバレッジが60%になった場合、正確に何を差し引くことができますか?「重要な」コードベースの60%がテストされていますか?どうやって 私が懸念している限りでは、「本当の」コードカバレッジ値を維持することを好みます。さらに、Sonarのおかげで、コードベースを簡単にナビゲートし、モジュール/パッケージ/クラスについて、独自のコードカバレッジを知ることができます。しかし、もちろん、グローバルなコードカバレッジはまだ低いでしょう。 その主題についてのあなたの意見は何ですか?あなたのプロジェクトはどうしますか? ありがとう。 (1)これらのレイヤーは、一般的にUI / Java Beanなどに関連しています。 (2)それは真実ではないことを知っています。実際、それは私のコードベースの40%

4
静的型付け機能コードの単体テスト
haskell、scala、ocaml、nemerle、f#、またはhaXeで記述された静的に型付けされた機能コードを単体テストするのが理にかなっています(最後は本当に興味のあることですが、より大きなコミュニティの知識を活用してください)。 私の理解から: 単体テストの1つの側面は、仕様を実行可能な形式にすることです。ただし、形式化された仕様を言語セマンティクスに直接マップする宣言スタイルを使用する場合、実際に仕様を実行可能な形式で別の方法で表現することもできますか? 単体テストのより明白な側面は、静的分析では明らかにできないエラーを追跡することです。型安全機能コードは、静的アナライザーが理解するものに非常に近いコードを作成するための優れたツールであることを考えると、多くの安全性を静的分析にシフトできるように思われます。ただし、コードxでy(両方とも座標)の代わりに使用するような単純なミスはカバーできません。OTOHこのような間違いは、テストコードの作成中にも発生する可能性があるため、努力する価値があるかどうかはわかりません。 ユニットテストでは冗長性が導入されます。つまり、要件が変更された場合、それらを実装するコードとこのコードをカバーするテストの両方を変更する必要があります。もちろん、このオーバーヘッドはほぼ一定であるため、実際には問題ではないと主張することができます。実際、Rubyのような言語では実際には利点と比較されませんが、静的に型指定された関数型プログラミングが地上ユニットテストの多くを対象としていることを考えると、ペナルティなしで単純に削減できる一定のオーバーヘッドのように感じます。 このことから、このプログラミングスタイルでは単体テストはやや時代遅れであると推測します。もちろん、そのような主張は宗教的な戦争につながる可能性があるため、簡単な質問に要約します。 このようなプログラミングスタイルを使用する場合、単体テストをどの程度使用し、その理由は何ですか(コードでどの程度の品質を得たいと考えていますか)。または、逆に、静的アナライザーでカバーされているため、ユニットテストのカバレッジを必要とせずに、静的に型指定された機能コードのユニットを修飾できる基準はありますか?

5
「新しい」キーワードを使用する必要がある場合と使用しない場合
Misko HeveryによるUnit Testingに関するGoogle Tech Talkのプレゼンテーションを見て、彼newはビジネスロジックコードでキーワードを使用しないように言った。 プログラムを作成し、newキーワードをあちこちで使用することになりましたが、それらは主にデータを保持するオブジェクトをインスタンス化するためのものでした(つまり、関数やメソッドはありませんでした)。 私は自分のプログラムに新しいキーワードを使用したときに何か間違ったことをしたのだろうかと思っています。そして、その「規則」をどこで破ることができるでしょうか?

6
パラメータ化されたテスト-いつ、なぜそれらを使用しますか?
最近仕事では、パラメータ化テストに関して意見の違いがあります。通常、TDDスタイルを使用します(少なくとも試してみます)。そのため、このアプローチの利点を理解しています。ただし、パラメータ化されたテストがもたらすゲインの表示に苦労しています。参考のために、RESTfulインターフェースを介して公開されるサービスとそのライブラリーに取り組みます。 これまで見てきたのは、少なくともEclipse内でJUnitを使用するテストです。 詳細がない-テストが失敗すると、失敗の原因となったパラメーターを見ることは非常に困難です 作成が複雑なことが多い コードが記述された後に作成される傾向があります-厳密には欠点ではありませんが、コードを開始するときにパラメータ化されたテストを念頭に置いていますか? 誰かが本当に便利な場所の例や、それらを使用するための良いヒントさえあれば素晴らしいでしょう。私は個人的にそれらを使用することを選択しないので、私が頑固ではないことを確認したいと思います。

4
Webアプリケーションでのテスト駆動開発のリソースですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または詳細な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 WebアプリケーションにTDDを実装して、リグレッションを減らし、リリースの品質を向上させたいと思いますが、Webアプリケーションのようにふわふわしたもので自動化されたテストをどれだけうまく実行できるか確信がありません。 TDDと単体テストについて読んで試しましたが、例は「堅実」で、通貨コンバーターなどの単純な機能です。 コンテンツ管理および公開システムの単体テストに役立つリソースはありますか?ショッピングカート/ストア(物理製品およびオンライン製品)の単体テストはどうですか?AJAX? 「Web Test Driven Development」のグーグル検索では、数年前の古い記事で、計算機のような機能の同じ例や、TDDが何よりも優れている理由(例なし)について説明しています。

4
コードレビューと単体テストの実践を推進する
コードレビューと単体テストの経験がない(そして必要がない)開発者グループを管理するチームリーダーとして、コードレビューと単体テストの実践をどのように進めることができますか? コードレビューと単体テストが開発者のフローに自然に適合するように、どのように方法を作成しますか? これら2つの領域の抵抗の1つは、「私たちは常に日付変更に厳しいため、コードのレビューと単体テストの時間がない」ということです。 コードレビューに対する別の抵抗は、現在どのようにそれを行うかわからないということです。チェックインごとにコードを確認する必要がありますか、それとも特定の日にコードを確認する必要がありますか?

2
RailsのRSpec vs Test :: Unit
Ruby on RailsでTest :: UnitからRSpecに切り替えることで得られる利点を、RSpecについて時々読んでいるにもかかわらず、私は本当に確信していません。 ほとんどのRailsプロジェクトがRSpecを使用しているように見えるのは、RSpecについての何ですか? (一方が他方より優れていることを明確に示すいくつかのコード例は大歓迎です)

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