私は現在 C# での開発に携わっています - ここにいくつかの背景があります: クライアント アプリケーションで MVP を実装し、5 を超える循環的複雑度を持つメソッドは存在しないという循環的規則があります。これにより、多くの小さなプライベート メソッドが発生します。これらは通常、1 つのことを担当します。
私の質問は、クラスの単体テストに関するものです。
パブリック メソッドを使用したプライベート実装のテストはすべて問題ありません...これを実装するのに問題はありません。
しかし...次の場合はどうでしょうか。
例 1.非同期データ取得リクエストの結果を処理します (コールバック メソッドは、純粋にテストのために公開するべきではありません)。
例 2.操作を行うイベント ハンドラー (ビュー ラベルのテキストの更新など - 私が知っているばかげた例...)
例 3.保護された仮想メソッドをオーバーライドして拡張できるサードパーティ フレームワークを使用しています (パブリック メソッドからこれらの仮想メソッドへのパスは、一般にブラック ボックス プログラミングとして扱われ、フレームワークが提供するあらゆる種類の依存関係があります。あなたは知りたくない)
上記の例は、設計が不十分な結果であるとは思えません。また、そのようなメソッドはコンテキストを失うため、分離してテストするために別のクラスに移動する候補にはなりません。
これについて考えている人はいますか?
乾杯、ジェイソン
編集: 元の質問では十分に明確ではなかったと思います-アクセサーを使用してプライベートメソッドをテストし、TypeMock を使用して呼び出し/メソッドをモックできます。それは問題ではありません。問題は、公開する必要がない、または公開できないものをテストすることです。
セキュリティの抜け穴を導入する可能性があるため、テストのためにコードを公開したくありません (これを非表示にするためのインターフェイスを公開することはオプションではありません。オブジェクトを元の型にキャストして戻すことができるため、私はしたくありません)
テストのために別のクラスにリファクタリングされるコードは問題ありませんが、コンテキストが失われる可能性があります。私はいつも、特定のコンテキストのないコードのポットを含むことができる「ヘルパー」クラスを持つのは悪い習慣だと思っていました - (ここでSRPを考えてください)。これがイベントハンドラーでも機能するとは本当に思いません。
私は間違っていることが証明されてうれしいです - この機能をテストする方法がわかりません! 私は常に、それが壊れたり変更されたりする可能性がある場合は、テストすることを心に留めていました.
乾杯、ジェイソン