問題タブ [testdrivendesign]
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.
agile - BizTalk で DDD、TDD を引き続き使用するにはどうすればよいですか?
仕事で BizTalk を使い始めたばかりで、DDD や TDD などについて学んだことをすべて使い続けたいと思っています。パイプラインやオーケストレーションなどを作成するとき、これは可能ですか、それとも常に Visio のようなエディターを使用する必要がありますか? ?
unit-testing - モッキングの目的
嘲笑する目的は何ですか?
テストに NUnit を使用し、モックに Moq を使用するいくつかの ASP.NET MVC チュートリアルに従っています。ただし、その嘲笑の部分については少しわかりません。
python - TDD-初心者の問題と障害
私が行ったコードのほとんどについて単体テストを作成しましたが、ケント・ベックの例でTDDのコピーを入手したのはつい最近のことです。アプリケーションを「テスト可能」にすることができなかったため、私が行った特定の設計上の決定を常に後悔しています。私はこの本を読みましたが、一部は異質に見えますが、それを管理できると感じ、基本的に2つの部分が通信するクライアント/サーバーシステムである現在のプロジェクトで試してみることにしました。USB。1つはガジェットに、もう1つはホストにあります。アプリケーションはPythonです。
私は始めてすぐに、書き直しの混乱と小さなテストに巻き込まれましたが、後で実際には何もテストされていないと思いました。私はそれらのほとんどを捨てました、そして今、テストがすべてたった2つに凝固した実用的なアプリケーションを持っています。
私の経験に基づいて、私が聞きたいいくつかの質問があります。NewからTDDまでいくつかの情報を入手しました:TDDの実行方法を示すテスト付きのサンプルアプリケーションはありますか?しかし、私が答え/議論したいいくつかの特定の質問があります。
- Kent Beckは、開発プロセスをガイドするために、彼が追加および削除したリストを使用します。どのようにしてそのようなリストを作成しますか?最初は「サーバーを起動する必要がある」、「チャネルが利用できない場合はサーバーを中止する必要がある」などの項目がいくつかありましたが、それらは混ざり合い、最終的には「クライアントがサーバーに接続できる必要があります」のようなものになりました。包含サーバーの起動など)。
- 書き換えはどのように処理しますか?最初は名前付きパイプに基づく半二重システムを選択したので、自分のマシンでアプリケーションロジックを開発し、後でUSB通信部分を追加できました。それらはソケットベースのものに移行し、次にrawソケットの使用からPythonSocketServerモジュールの使用に移行しました。状況が変わるたびに、面倒なテストのかなりの部分を書き直さなければならないことに気づきました。私は、テストが私の開発中にいくぶん不変のガイドになるだろうと考えました。彼らは、処理するコードが増えたように感じました。
- どちらかの側をテストするために、チャネルを介して通信するためのクライアントとサーバーが必要でした。片方をモックしてもう片方をテストすることはできましたが、チャンネル全体がテストされなかったので、それを見逃してしまうのではないかと心配しています。これは、赤/緑/リファクタリングのリズム全体を損ないました。これは単に経験不足ですか、それとも私は何か間違ったことをしていますか?
- 「あなたがそれを作るまでそれを偽造する」は私にたくさんの厄介なコードを残しました、そしてそれは後で私がリファクタリングとクリーンアップするために多くの時間を費やしました。これは物事が機能する方法ですか?
- セッションの最後に、クライアントとサーバーを約3〜4個の単体テストで実行しています。それをするのに約1週間かかりました。コードの後に単体テストを使用していれば、1日でそれを実行できたと思います。ゲインがわかりません。
この方法論を使用して、大規模で重要なプロジェクトを完全に(またはほぼ完全に)実装した人々からのコメントとアドバイスを探しています。すでに何かを実行していて、新しい機能を追加したい場合は、その方法に従うのが理にかなっていますが、最初からそれを行うのは面倒で、努力する価値がないようです。
PS:これがコミュニティウィキであるかどうかを教えてください。そのようにマークします。
更新0:すべての回答が等しく役に立ちました。自分の経験に最も共鳴したので、自分がやったものを選びました。
アップデート1:練習練習練習!
c# - TDDによるマッピング関数の作成:テストの作成に時間がかかりすぎていませんか?
私はTDDの大ファンであり、本番コードを作成する前にテストを作成して、作成しているコードが正しく動作することを確認するよう常に努めています。ただし、場合によっては、特定の種類のメソッドに対して大量のテストを作成することが賢明かどうかという疑問がいくつかあります。これは、マッパークラスを作成するときに最も頻繁に発生するようです。
たとえば、上記にマップするプロパティが約12個あるとします。TDD環境では、マッピングを作成する前に、おそらくテストを作成します。のようなものMapToFooMapsBeverageToFooYuk()
。テストが失敗し、合格するためのコードを書くことになりました。マップするプロパティごとにこれを繰り返します。問題は、これはテストファースト開発をやりすぎているのかということです。私は個人的にはそうは思いません。コードが何をするのかを正確に教えてくれる完全なテストスイートが欲しいのですが、コミュニティの考えを聞きたいのです。
.net - ユニットテストまたは機能テスト?
最近、ユニットテストよりも機能テストについて聞いたことがあります。
単体テストでは、特定のコードの可能性のそれぞれを、最も原子的な形式からテストすることを理解しています。しかし、機能テストはどうですか?
これは、コードが機能するかどうかをテストするだけのように聞こえますが、単体テストと同じくらい信頼できますか?
私はその問題について2つの考え方があると言われました。ユニットテストを好む人もいれば、機能テストを好む人もいます。
このテーマに関する私の道を説明し、啓蒙することができる良いリソース、リンク、本、参考文献、またはあなたの一人がいますか?
ありがとう!
asp.net-mvc - TDDとMVCの交差点。どのORMがうまく統合されていますか?
私はMVCの世界で始めたばかりで、VS 2010に組み込まれている標準のMVCテンプレートを使用しました。いくつかのコントローラーとビューが接続されているので、データベースにアクセスする必要があります。
非常に大規模な既存のSQLServer2005データベースがあり、すでにサードパーティの会社によって定義されています。私は、特定の会社のニーズに合わせて、レポート/管理インターフェイスを追加しようとしています。
ですから、最初は、このDBのいくつかのテーブルからリストを取得したいと思います。それで...MVC3を使用して、うまく統合するいくつかのORMツールは何ですか?
また、テストドライブ設計アプローチを使用しようとしています。データの挿入/更新/削除が必要なテストをどうすればよいかわかりません。それが「モック」の登場でしたか?
testing - デリゲートをDIしてテスト可能にすることができるのに、なぜインターフェイスを抽出するのですか?
私はSOを閲覧していて、答えについてこのコメントに出くわしました。
デリゲートをDIしてテスト可能にすることができるのに、なぜインターフェイスを抽出するセレモニーを通過するのですか?
これは、私がその年の初めに持っていた考えを明確に示しました。インターフェイスの実装の代わりに純粋な機能(関数ポインタ、私は推測する)を注入することに本質的に何か問題がありますか?
unit-testing - TDD マルチスレッド アプリケーション
マルチスレッド機能を純粋なTDD方式で開発する方法について、誰かが光を当てることができますか。(おそらく、C# または Java のいくつかの例を使用)
前もって感謝します。
tdd - TDDCRUDベースのシナリオ
簡単なCRUDベースのアプリケーションを実行する必要があります。私はTDDの方法でこれにアプローチしようとしています。私はTDDの初心者であり、テストの進め方を実際に理解することはできません。
シナリオは次のとおりです。
- 従業員を(一度に1人ずつ)作成/更新/削除できる必要があります。
- 表示目的で従業員のリストを取得できる必要があります
簡単にするために、これをコマンドラインアプリケーションと見なすことができます。(実際には、これをWPF MVVMアプリケーションとして実行します。)
私の最初のテストがどうあるべきかわかりません。
私がこれまでに試したことは次のとおりです。
一連の従業員を返す従業員リポジトリがあると仮定します。
私が試みた最初のテストは次のとおりです。
これから始めて、GetEmployees()メソッドからEmployeeオブジェクトを返し、テストに合格しました。次に、テストに合格したら、EmployeeRepositoryをリファクトしてインターフェイスを実装し、それをテストメソッドで使用しました。
これは非常に簡単な作業であり、このアプローチは私にとってはやり過ぎのようです(少なくとも今のところ)。しかし、アプリケーションが大きくなると、些細なことでもテストがうまくいくと確信しています。
しかし、私のアプローチでは何かが正しくないと感じています。経験豊富なTDDerは同じアプローチに従いますか?またはそれは何でしょうか。また、「従業員の追加」機能に使用できるテストは考えられません。
これらのCRUDシナリオをスキップして、他のより複雑な機能を試してみることができます。しかし、それは正しいアプローチですか?
基本的に、私が今行っているのは、リポジトリのテストドライブです。これは、情報の保持と取得以外には何もしません。これまでのところ、このTDDは、私にとって非常にありふれた作業のように見えました。
すべての入力に感謝します。
java - Eclipseでテスト駆動設計の概念を使用して例外をテストするにはどうすればよいですか
テスト駆動設計のコンセプトを使用して Stack クラスを作成しています。
setUp() メソッドでは、私のスタックはこのような 0 要素で作成されます
これは、setUp() の直後に top が呼び出されたときに発生する StackEmptyException をキャッチするために試みたテストです。
私の問題は最後の行にあります。コードが機能しない理由がわかりません。