問題タブ [unit-testing]
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.
unit-testing - Sealed クラスをどのようにモックしますか?
シールされたクラスをモックすることは、非常に面倒です。私は現在、これを処理するためにAdapter パターンを好みますが、単に維持することについては何かが奇妙に感じます。
では、封印されたクラスをモックする最良の方法は何ですか?
Java の回答は大歓迎です。実際、Java コミュニティはこれに長く取り組んでおり、多くのことを提供していると思います。
ただし、.NET に関する意見の一部を次に示します。
unit-testing - ジュニアプログラマーにテストを書かせるにはどうすればよいですか?
単に十分なテストを書かないジュニアプログラマーがいます。
私は2時間ごとに彼をしつこくしなければなりません、「あなたはテストを書きましたか?」
私たちは試しました:
- デザインがシンプルになることを示す
- それを示すことは欠陥を防ぎます
- 悪いプログラマーだけがそうしないと言ってそれをエゴにする
- 今週末、2人のチームメンバーが仕事に来なければなりませんでした。彼のコードにはNULL参照があり、彼はそれをテストしなかったからです。
私の仕事には最高品質の安定したコードが必要であり、通常は誰もが「それを取得」し、テストをプッシュする必要はありません。私たちは彼にテストを書かせることができることを知っていますが、有用なテストはあなたがそれに興味を持っているときに書かれたものであることを私たちは皆知っています。
もっと動機を知っていますか?
unit-testing - テストされていないコードとテストできないコードをどのようにテスト/変更しますか?
最近、すべてのコードに単体テストがあるわけではない古いシステムで、いくつかのコードを変更する必要がありました。
変更を加える前にテストを書きたいのですが、各クラスは多くの依存関係やその他のアンチパターンを作成し、テストが非常に困難でした。
明らかに、コードをリファクタリングして、テスト、テストの作成、および変更を容易にしたかったのです。
これがあなたのやり方ですか?それとも、リファクタリングが完了した後にほとんど削除される、書きにくいテストの作成に多くの時間を費やしますか?
unit-testing - Web UIの単体テストに何を使用しますか?
私が現在働いている会社は、ユーザーインターフェイスの統合テストにSeleniumを使用しています。Web UIの単体テストに何を使用し、どの程度効果的だと思いますか?
c++ - 失敗時にスローされる関数のテスト
失敗時にスローされる関数をテストする最良の方法は何ですか? または、障害の影響をかなり受けない機能をテストしますか?
例えば; I/O Completion Port
ポートを正しく初期化できない場合にコンストラクターをスローするクラスがあります。これは、イニシャライザ リストのWin32
関数を使用します。CreateIoCompletionPort
ハンドルが正しく設定されていない場合 (null 以外の値)、コンストラクターは例外をスローします。この関数が失敗するのを見たことがありません。
これ(および私のコード内の同様の他の関数)が失敗した場合、コードは空白を含めて50行の長さであるため、私の質問は
a)それがスローされることをテストする価値は
ありますか b)テストする価値がある場合、どのように?
c) 単体テストが必要なため、単純なラッパー クラスを使用する必要がありますか?
CreateIoCompletionPort
b) については、値をオーバーライドして渡すことを考えました。単体テストではそれをオーバーライドし、特定の値が渡されたときに 0 を返すようにします。ただし、これはコンストラクターで使用されるため、これは静的である必要があります。これは有効に見えますか?
php - 特定の順序で PHPUnit テストを実行する
内のテストをTestCase
特定の順序で実行する方法はありますか? たとえば、オブジェクトの作成から使用、破棄までのライフサイクルを分離したいのですが、他のテストを実行する前に、オブジェクトが最初に設定されていることを確認する必要があります。
unit-testing - 単体テストの実行速度 (1 秒あたりのテスト数は?)
単体テストでどのような実行率を目指していますか (1 秒あたりのテスト数)? 個々の単体テストにはどれくらいの時間がかかりますか?
テストが遅すぎるかどうかを判断するための特定のしきい値があるかどうかを知りたいと思いますか、それとも長時間実行されるテストスイートの摩擦があなたを良くするときだけですか?
最後に、テストをより高速に実行する必要があると判断した場合、テストを高速化するためにどのような手法を使用しますか?
注: 統合テストは明らかに別の問題です。できるだけ頻繁に実行する必要がある単体テストを厳密に話しています。
回答のまとめ:これまで素晴らしい回答をありがとうございました。ほとんどのアドバイスは、速度について心配する必要はないようです。品質に集中し、遅すぎる場合は選択的に実行してください。特定の数値を含む回答には、テストごとに最大 0.5 および 1 秒まで 10 ミリ秒未満を目指すこと、または一般的に実行される一連のテスト全体を 10 秒未満に保つことが含まれます。
それらがすべて役立つ場合に、「受け入れられた回答」としてマークするのが正しいかどうかはわかりません:)
unit-testing - 統合テストと単体テストの違いは何ですか?
単体テストと統合テストのいわゆる教科書的な定義を知っています。私が興味を持っているのは、単体テストを作成する時期です...できるだけ多くのクラスのセットをカバーするように記述します。
たとえば、クラスがある場合、クラスWord
の単体テストをいくつか作成しWord
ます。次に、Sentence
クラスの作成を開始し、クラスと対話する必要がある場合は、少なくともそれらが対話する場所でWord
両方をテストするように単体テストを作成することがよくSentence
あります。Word
これらのテストは、これら 2 つのクラスの統合をテストするようになったため、本質的に統合テストになりましたか? それとも、2 つのクラスにまたがる単なる単体テストですか?
一般に、この不確実な行のために、実際に統合テストを作成することはめったにありません...または完成品を使用して、すべての部分が実際の統合テストで適切に機能するかどうかを確認します.手動であり、範囲を超えて繰り返されることはめったにありません.個々の機能の?
統合テストを誤解していますか、それとも統合テストと単体テストの違いは本当にほとんどないのでしょうか?
c# - ディープ クローニングの単体テスト
多数の配列やその他のクラス オブジェクト メンバーを含む複雑な .NET クラスがあるとします。このオブジェクトのディープ クローンを生成できるようにする必要があるため、Clone() メソッドを記述し、単純な BinaryFormatter シリアル化/デシリアライズを使用して実装します。または、エラーが発生しやすい他の手法を使用してディープ クローンを作成することもできます。そして、私はそれがテストされていることを確認したいと思います.
よし、じゃあ (よし、最初にやるべきだった) クローン作成をカバーするテストを書きたい。クラスのすべてのメンバーはプライベートであり、私のアーキテクチャは非常に優れている (!) ため、何百ものパブリック プロパティや他のアクセサーを記述する必要はありません。このクラスは、アプリケーションで必要ないため、IComparable または IEquatable ではありません。私の単体テストは、製品コードとは別のアセンブリにあります。
複製されたオブジェクトが適切なコピーであることをテストするために、人々はどのようなアプローチをとりますか? 「処女」オブジェクトまたはそのクローンのいずれかで呼び出せるように、クラスのすべての単体テストを作成しますか (またはクローンの必要性を発見したら書き直しますか)。クローニングの一部が十分に深くない場合、どのようにテストしますか? これは、後で見つけるのが困難なバグを引き起こす可能性のある種類の問題です。
c++ - コードジェネレーターをユニットテストするにはどうすればよいですか?
これは私が知っている難しい自由形式の質問ですが、私はそれを床に投げて、誰かが何か面白い提案があるかどうかを確認したいと思いました。
PythonインターフェイスをC++コード(SWIGを介して生成)に変換し、これをWebServicesとして公開するために必要なコードを生成するコードジェネレーターを開発しました。このコードを開発したとき、TDDを使用して開発しましたが、テストが非常に脆弱であることがわかりました。各テストは基本的に、特定の入力コード(C ++ヘッダー)に対して特定の出力コードを取得することを確認する必要があるため、XML入力ファイルからテスト定義を読み取り、テストを生成する小さなエンジンを作成しました。これらの期待からのケース。
問題は、コードを変更することを恐れていることです。それと、ユニットテスト自体がa:複雑で、b:もろいという事実。
だから私はこの問題への代替アプローチを考えようとしています、そしてそれは私がおそらくそれを間違った方法で取り組んでいることに気づきます。たぶん私は結果にもっと焦点を合わせる必要があります、IE:私が生成したコードは実際に実行され、私が望むように見えるのではなく、私が望むことをしますか?
誰かがこれに似た何かの経験を共有したいと思ったことはありますか?