2011-02-10 38 views
1

我從這個 post (accepted answer code)採取了一種方法序列化對象,以便我可以得到該對象的新副本。如何讓我的擴展忽略Moq? Moq.Interceptor不可序列化

現在我試圖做一個單元測試,但每次我到達,我試圖克隆它

Tests.ServiceLayer.TestTService.Test_Something出現的對象: System.Runtime.Serialization .SerializationException :裝配中鍵入'Moq.Interceptor' 'Moq,Version = 3.1.416.3, Culture = neutral, PublicKeyToken = 69f491c39445e920'is 未標記爲可序列化。

所以它似乎是我的嘲弄的對象有一些東西在克隆試圖複製,但不能。

我不確定如何告訴它忽略這些東西。我會嘲笑克隆,但我使用的擴展方法,我不認爲我可以模擬出來。

+0

你想測試什麼?該模擬很可能不會被序列化(因爲它確實不是),因此克隆方法不適用於它。但是,我會想象你只想複製簡單的數據對象,因此你應該能夠創建一個簡單的存根,而不是從Moq模擬<> – mfloryan 2011-02-11 11:02:46

+0

@mfloryan - 好吧,因爲這個對象是一個域對象,它與nHibernate一起使用它有許多對象引用其他對象。所以它實際上是一個需要的深層副本。我可以手動創建任務,但由於我需要在該對象中創建許多對象集合,因此它只是腿部工作的一部分。所以嘲笑它的大部分是不錯的。如果我無法繞過它,我會這樣做。 – chobo2 2011-02-11 17:38:20

回答

0

由Moq創建的代理類不是Serializable,這就是爲什麼在這種情況下您不能使用Clone方法。您必須用別的東西替換模擬對象,或者嘗試按照this blog post模擬擴展方法。

相關問題