PrivateObjectExtensions
作った。
ユニットテスト書いている時、実際の型と見えている型が違うとか同じとかを気にせずにprivateメンバにアクセスしたいことがよくある。Moqでモック作った時とか、基底クラスの型でオブジェクトを扱っている時とか。staticかどうかも気にしたくない。PrivateObjectは色んなメソッドを使い分けたりしないといけないので、シンプルな拡張メソッドで自動解決するようにしてみました。
PrivateObjectを使う9割は単にフィールド・プロパティのget、setがしたいだけ。PrivateObjectExtensionsにはGetPrivate()
とSetPrivate()
のみ。生産的でないことは何も考えずに真っすぐアクセスできます。object型に対して拡張メソッドをつけるとか、使用範囲がユニットテストに限られるから許される?
PrivateObjectが提供していても使用頻度少ないと思われる機能はバッサリサポートしていません。ややこしいことする時は標準のやり方でやる。Invokeとか難しいけどほぼ使わないし。
neue cc - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの原理原則
この生放送に触発されて。