2011-02-10 65 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模拟扩展方法。