2011-02-10 4 views
1

이 객체의 새로운 사본을 얻을 수 있도록이 객체를 직렬화하는 post (accepted answer code) 메소드를 사용했습니다. 내 확장 기능이 Moq를 무시하도록하려면 어떻게합니까? Moq.Interceptor가 직렬화 가능하지 않습니다.

는 지금은 단위 테스트를하려고하지만 매번 내가 그것을

Tests.ServiceLayer.TestTService.Test_Something 올라옵니다 복제하려고 개체에 가져옵니다 들은 System.Runtime.Serialization .SerializationException : 어셈블리 입력 'Moq.Interceptor' 'MOQ, 버전 = 3.1.416.3, 중립 문화 = PublicKeyToken = 69f491c39445e920이'로 직렬화 표시되지 입니다.

그래서 내 조롱 된 개체에 복제물이 복사하려고하지만 복제 할 수없는 물건이있는 것으로 보입니다.

나는 이것을 무시하는 방법을 확신하지 못합니다. 나는 복제품을 조롱 할 것이지만 나는 내가 조롱 할 수 없다고 생각하는 확장 방법을 사용하고있다.

+0

테스트 할 대상이 무엇입니까? 모의 (mock)은 직렬화되지 않을 가능성이 높으므로 (실제로는 그렇지 않습니다) 따라서 Clone 메서드가 작동하지 않습니다. 그러나 단순한 데이터 객체만을 복사하고자하므로 Moq <> – mfloryan

+0

@mfloryan의 모의 객체가 아닌 단순 스텁을 생성 할 수 있어야합니다.이 객체는 nHibernate와 함께 사용되는 도메인 객체이므로 다른 객체에 대한 많은 객체 참조를가집니다. 따라서 실제로 필요한 전체 복사본입니다. 수동으로 작업을 생성 할 수 있지만 그 개체 내에서 많은 개체 컬렉션을 만들었으므로 그것은 다리 작업 일뿐입니다. 그래서 그것의 대부분을 비웃는 것은 다소 좋았다. 내가 주변을 둘러 볼 수 없다면 나는 이것을 할 것이다. – chobo2

답변

0

Moq으로 만든 프록시 클래스가 Serializable이 아니므로이 경우 Clone 메서드를 사용할 수 없습니다. 조롱 된 오브젝트를 다른 것으로 바꾸거나 this blog post에 따라 확장 메소드를 조롱 해보십시오.

+0

@ mfloryan- 내가 그 게시물에서 한 일을해야하는지 잘 모르겠습니다. 내가 복제하려고하는 것은 nhibernate와 함께 사용되는 도메인 객체이다. 그래서 그것은 모두 가상 속성입니다. 인터페이스를 만들지는 모릅니다. – chobo2

+0

확인. 알 겠어. 그러나 복제물을 만드는 것보다 객체가 실제로 '심오다'(컬렉션 및 물건이 많다면) 잠재적으로 매우 비용이 많이 들며 NHibernate는 어쨌든 프록시를 생성하므로 속성이 가상 인 이유입니다. 프록시에 대한 깊은 사본. 클론의 요점은 무엇입니까? – mfloryan

+0

뷰 모델에 강력하게 형식화 된 뷰가 있습니다. 뷰 모델이 서버로 전송되고 유효성이 검사되면 자동 매핑을 사용하여 도메인 모델 (다른 도메인 모델에 연결할 수있는 모든 속성 및 nhibe ..)에 매핑합니다. 내보기에는 방금 만든 내용을 복사 할 수있는 옵션이 있습니다. 복사본에 몇 가지 변경 사항을 적용 할 수 있도록이 도메인 모델의 딥 클론을 수행해야합니다 (예 : 약속의 시작일이 매주 반복되므로 시작일이 7 일 이상 필요합니다). 날짜). 그런 다음 모든 복제본과 원본을 가져 와서 db에 저장합니다. – chobo2

관련 문제