PrivateObjectExtensions

github.com

作った。

ユニットテスト書いている時、実際の型と見えている型が違うとか同じとかを気にせずにprivateメンバにアクセスしたいことがよくある。Moqでモック作った時とか、基底クラスの型でオブジェクトを扱っている時とか。staticかどうかも気にしたくない。PrivateObjectは色んなメソッドを使い分けたりしないといけないので、シンプルな拡張メソッドで自動解決するようにしてみました。

PrivateObjectを使う9割は単にフィールド・プロパティのget、setがしたいだけ。PrivateObjectExtensionsにはGetPrivate()SetPrivate()のみ。生産的でないことは何も考えずに真っすぐアクセスできます。object型に対して拡張メソッドをつけるとか、使用範囲がユニットテストに限られるから許される?

PrivateObjectが提供していても使用頻度少ないと思われる機能はバッサリサポートしていません。ややこしいことする時は標準のやり方でやる。Invokeとか難しいけどほぼ使わないし。

neue cc - 過去に制作した30のライブラリから見るC#コーディングテクニックと個人OSSの原理原則

この生放送に触発されて。