7

私は最近、MichaelFeathersの本「LegacyCodeで効果的に作業する」を完成させました。これは、テストシームを効果的に作成し、それらを活用して既存のコードをテストする方法についてのすばらしい本でした。

彼が話しているテクニックの1つは、「リンクシーム」を使用することでした。基本的には、別のライブラリに依存するコードがある場合は、リンカーを使用して、本番用とは異なるテスト用のライブラリを挿入できるという考え方でした。これにより、モックライブラリを介してテスト条件を検知したり、実際の効果を持つライブラリ(データベース、電子メールなど)などを呼び出さないようにすることができます。

彼が挙げた例はC++でした。この手法(または同様の手法)が.NET / C#で可能かどうか知りたいですか?

4

2 に答える 2

5

はい、.Netで可能です。最も単純なケースでは、アセンブリを同じ名前の別のアセンブリに置き換えることができます。

厳密に名前が付けられたアセンブリでは、バージョン番号を変更してから、コンパイル時の「リンクされた」バージョンをオーバーライドするようにアセンブリバインディングを構成する必要があります。これは、企業、マシン、ユーザー、またはディレクトリレベルで実行できます。

セキュリティに関連するいくつかの注意事項があります。置換するアセンブリに強い名前が付けられている場合は、アセンブリに署名するときに同じ公開鍵を再作成する必要があります。

つまり、アプリケーション開発者がライブラリを「モック」(または悪意のあるコードに置き換える)したくない場合は、アセンブリが署名され、秘密鍵が公開されていないことを確認する必要があります。

これが、DateTimeをモックできない理由です。Microsoftは.Netのコアライブラリに強い名前を付けているためです。

于 2010-03-24T12:43:04.473 に答える
2

これは、 Typemockアイソレーターが提供するもの、特に既存のタイプを取り除いてモックするという彼らの主張する能力に少し似ているように聞こえます。しかし、私はそれを使ったことがありません;-(

一例として、DateTime.Nowあざけるべきではないものはありますか? 代替テキストhttp://site.typemock.com/storage/feature-images/dateTime.png?__SQUARESPACE_CACHEVERSION=1252774490561

于 2010-03-24T12:34:36.843 に答える