2011-02-10 4 views
1

私はこのオブジェクトから新しいコピーを取得できるようにオブジェクトをシリアル化するメソッドを post (accepted answer code)から取得しました。拡張機能でMoqを無視するにはどうすればよいですか? Moq.Interceptorがシリアル化可能ではありません

今、私はユニットテストを行うにしようとしていますが、毎回私はそれが

Tests.ServiceLayer.TestTService.Test_Somethingを思い付くクローンしようとしているオブジェクトを取得します: System.Runtime.Serialization .SerializationException :タイプアセンブリ の 'Moq.Interceptor' '部品番号、バージョン= 3.1.416.3、 文化=中立、 なPublicKeyToken = 69f491c39445e920' が としてシリアル化可能とマークされていません。

だから私のモックアップされたオブジェクトには、クローンがコピーしようとしているが、できないものがいくつかあるようです。

私はこれらのことを無視するように指示する方法は不明です。私はクローンを模倣するだろうが、私は私がモックアウトすることはできないと思う拡張方法を使用している。

+0

あなたは何を試そうとしていますか?モックはシリアル化可能ではない可能性が高いため(実際はそうではないため)、Cloneメソッドは機能しません。しかし、単純なデータオブジェクトをコピーしたいだけなので、Moq <> – mfloryan

+0

@mfloryanのモックではなく単純なスタブを作成できるはずです。このオブジェクトはnHibernateで使用されているドメインオブジェクトなので他のオブジェクトへの多くのオブジェクト参照を持っています。したがって、実際には必要な深いコピーです。私は手動でタスクを作成することができますが、そのオブジェクト内にオブジェクトのコレクションの多くを作成しなければならないので、足の仕事のほんの一部です。だから、ほとんどのことを嘲笑しているのはちょっといい感じだった。私はそれを回避することができない場合、私はこれを行います。 – chobo2

答えて

0

Moqによって作成されたプロキシクラスはSerializableではないため、この場合はCloneメソッドを使用できません。疑似オブジェクトを別のものに置き換えるか、this blog postのように拡張メソッドをモックしようとする必要があります。

+0

@ mfloryan-私は彼らがその投稿で何をしたのか分からない。私が複製しようとしているようなものは、nhibernateでも使われているドメインオブジェクトです。したがって、それはすべて仮想プロパティです。私はそこからインターフェイスを作るためのポイントがあるのか​​分かりません。 – chobo2

+0

OK。私はそれを得る。しかし、オブジェクトが本当に「深い」(コレクションやものがたくさんある)場合は、クローンを作成するよりもコストがかかる可能性があります。そして、NHibernateはプロキシを作成しているので(プロパティが仮想の理由です)プロキシ上の深いコピークローンのポイントは何ですか? – mfloryan

+0

私は、ビューモデルに強く型付けされたビューを持っています。ビューモデルがサーバーに送信され、検証されると、私はオートマッパーを使用してそれをドメインモデル(他のドメインモデルにリンクする可能性のあるすべてのプロパティおよびnhibe ..)にマップします。私は、自分が作成したもののコピーを作成するという選択肢があります。私はこのドメインモデルの深いクローンを行う必要がありますので、コピーにいくつかの変更を加えることができます(毎週繰り返される予定の開始日のように、コピーは開始日が7日以上必要です)日付)。私はこれらのクローンとオリジナルをすべて取り出し、dbに保存します。 – chobo2

関連する問題