3

私は最近、開発プロセスでMoqを使用しており、達成できることが気に入っています。

ただし、テストでメソッド(およびほとんどの場合プロパティ)をモックに置き換えることができるように、メソッド(およびほとんどの場合のプロパティ)を仮想化しています。

「すべてのメソッドとプロパティをオーバーライド可能にする」以外に、この一連のアクションにはどのような現実の影響がありますか?

4

2 に答える 2

10

さて、あなたはほとんどの種類の最適化を防ぎます。まず、JITterは、どの実装が呼び出されるかを知らない可能性があります(Mockを使用している可能性があるため、JITterはわかりません)。したがって、インライン化されたこれらすべてのプロパティアクセサーは、実際の呼び出しになります。 。インライン化に加えて、単純なプロパティは実行時に実際のオーバーヘッドを追加しません。仮想プロパティはインライン化されないため、インライン化されます。

それは物事のパフォーマンス面でした、もう一つの問題は、あなたが彼らが働いていると思うようにあなたがプロパティが働くことを信頼できないということです。すべてのプロパティが上書きされる可能性があります。自分でも「今回は本当に理にかなっているんですよね?」そのため、通常よりも頻繁に呼び出しツリーをチェックして、作業中のコードに適用できる実装をチェックすることになります。

于 2009-11-21T07:55:54.653 に答える
4

深刻な影響はないと思います。意図していなかったメソッド/プロパティを誤ってオーバーライドする可能性はかなり低くなります。

あるクラスのオブジェクトを別のクラス(モックオブジェクトなど)に置き換える機能は良いことだと思います。そのためには、仮想メソッド/プロパティを持つ基本クラスが必要です。それは、オープンクローズド原則に準拠するために抽象基本クラスを使用することを思い出させます。

于 2009-11-21T07:55:19.103 に答える