質問の最新バージョンモッキングフレームワークを使用して変曲点の対話を記録する。 Moq
こんにちは。
私の会社には、.NET 3.5に移行するとすぐにテストを受けることができるいくつかのレガシーコードベースがあります。私はMockingフレームワークとしてMoqを選択しました(私は鮮明な構文にすぐに惚れました)。
将来的に多く見られると予想される1つの一般的なシナリオは、他のオブジェクトとやりとりするオブジェクトを参照する場所です。
私はマイケルフェザーズの作品を知っています。変曲点を特定して、まともなサイズのコンポーネントを分離するのが得意です。抽出と上書きは王様です。
しかし、私の人生をはるかに簡単にする機能があります。
Component1とComponent2との対話を想像してください。 Component2は、火災の中央またはsomesuchにいくつかの奇妙なシリアル回線インターフェイスですが、多くのバイト検査、キャスティングおよびポインタ操作があります。私はComponent2を理解したくありませんし、Component1で消費されてきたレガシーインターフェイスには手荷物がたくさんあります。私は通常のモックを作成していますが、私はのインスタンスでパージングしています
component1.FireCentral = new Mock<IComponent2> (component2);
:私がやりたい何
は、コンポーネント1によって消費COMPONENT2のインターフェースを抽出し、このような何かを行うことです実際のComponent2をMockオブジェクトのコンストラクタ引数として返します。私はComponent2に依存してテストをしているように思えるかもしれませんが、私はこのコードを保存するつもりはありません。これは、「テスト対象の場所オブジェクト」の儀式の一部です。
今、私は実際のシステムを(物理的な火を中央に接続して)起動し、次に私のオブジェクトとやりとりします。
私が望むのは、モックを調べて、component1がcomponent2とどのようにやりとりしたかのログを見ることです(モック上の文字列のコレクションを検査するためにデバッガを使用します)。さらに、模擬テストでは、テストコードで使用するComponent2に依存しないモックでこの動作を作成する期待のリスト(C#で)を提供することができました。
要するに、 mockingフレームワークを使用してインタラクションを記録し、テストコードで再生できるようにします。
質問
のHiの旧バージョン。
レガシーコードと多くのユーティリティクラスで作業することで、さまざまなシナリオで特定のクラスが周囲からどのように影響を受けているのか疑問に思うことがあります。 私が今朝働いていた1つのケースでは、一定のサイズに達するとその内容をファイルにダンプするように、通常のMemoryStreamをサブクラス化する必要がありました。
// TODO: Remove
private class MyLimitedMemoryStream : MemoryStream
{
public override void Write(byte[] buffer, int offset, int count)
{
if (GetBuffer().Length > 10000000)
{
System.IO.FileStream file = new FileStream("c:\\foobar.html",FileMode.Create);
var internalbuffer = GetBuffer();
file.Write(internalbuffer,0,internalbuffer.Length);
}
base.Write(buffer, offset, count);
}
}
(そして、ファイルを書き込んだ後にプログラムを終了するためにここでブレークポイントを使用しました)。 これはうまくいきましたが、どのWebフォーム(Webパーツ→Webパーツ→Webパーツ)コントロールが正しく表示されないかを確認しました。しかし、memorystreamにはたくさんの書き込みと書き込みがあります。
模擬フレームワークを使用して、特定のインスタンスがどのように動作しているかの概要をすばやく確認できますか?どんな巧妙なトリックですか? Rhino Mocksを使用しています。
これは、従来のコードを操作する上で大きな資産といえます。特に、シナリオで記録されたアクションが、単体テストで複製された同じシナリオに対する新しい期待/受諾基準として容易に設定できる場合。
すべての入力が高く評価されます。読んでくれてありがとう。
あなたは2009年以来、このための何かを見つけますか?私はJVMのためにこれをしたい。 –
いいえ。依存関係の動作をラップして記録する、モッキングフレームワークのタイプは、まだ私を逃しています。しかし、別の深刻な見通しの周りの時間かもしれません。 – Tormod
ここでは、Javaと同じ質問があります。 http://stackoverflow.com/questions/16400897/record-method-calls-in-one-session-for-replaying-in-future-test-sessions 答えの1つは要点の実装を示しています。 https://gist.github.com/dfreeman/5563829 –