Mocking으로 ArcObject를 단위 테스트하는 방법은 무엇입니까?


10

나는 단위 테스트에 대한 열렬한 팬이지만 여전히 ArcObjects 프레임 워크를 사용할 때 단위 테스트를 실행하기위한 기능을 얻기 위해 FGDB를 사용합니다.

IFeature, IGeometry, IWorkspace 등과 같은 생각에 대해 조롱을 성공적으로 사용하는 사람이 있습니까? 그렇다면 그렇다면 어떻게하고 있는지 몇 가지 예를보고 싶습니다. 나는 당신이 사용 하는 조롱 프레임 워크에 신경 쓰지 않고 , 어떻게하고 있는지 보는 것이 크게 감사 할 것입니다.

내가 보는 문제는 동일한 객체의 너무 많은 인터페이스를 슬라이스하고 주사위로 잘라야 대표 모의 객체를 만드는 오버 헤드가 크다는 것입니다.


Mocking에 대해 모르는 다른 사람은 (나 같은)이 링크를 참조하십시오. 재미있는 것들. stackoverflow.com/questions/300177/…
사이먼

답변:


14

우리는 대규모 프로젝트에서 ArcObjects 코드를 비즈니스 로직과 분리하기 위해 상당히 잘 관리했습니다. 그것은 일반적으로 모의 프레임 워크를 사용하여 길을 얻는 것이 가능하더라도 모든 것을 모방하려고 시도하는 것이 아니라 일반적으로 갈 길입니다.

왜 스스로 모의해야한다고 생각하는지 스스로에게 물어보십시오. 일반적으로 추상화가 누락 되었기 때문입니다. 작은 책임을 생각하고 거대하고 못생긴 ArcObject 몬스터의 표면을 최소화하십시오. ArcObject 유형의 일부 측면이 어딘가에 필요하기 때문에 드래그하지 마십시오.

우리 프로젝트에서 하나의 구체적인 예를들 수 있습니다. 코드의 일부가 IMxDocument에 의존하는 것 같습니다. 유일한 이유는 활성보기를 새로 고쳐야했기 때문입니다. 그래서 우리는 대신 IViewRefresher 인터페이스를 만들고 그 작업 만했습니다. 모의하고 테스트하기 쉽습니다. 또한 코드 의 의도 를보다 명확하게하고 누군가가 IMxDocument를 사용하여 재미있는 작업을 시작하려는 유혹을 제거합니다. 많은 ArcObjects 코드로 동일한 연습을 수행 할 수 있습니다.

또한 피처 클래스에 대한 모든 액세스를 유형 안전 래퍼로 래핑하여 ArcObjects에서 비즈니스 코드를 보호하는 모의 코드를 다시 제공했습니다.

우리는 ArcObject의 지오메트리 유형을 사용하는 것에 대해서도 논의하지 않았지만, 현재 이러한 인터페이스를 코드에서 직접 사용할 수 있습니다. 그러나 인터페이스 지식 만 허용되며 모든 형상의 인스턴스화는 자체 형상 팩토리를 사용합니다.

요약하면, 조롱을 권장하지는 않지만 ArcObject와는 다른 추상화 수준에서 조롱을 권장합니다.


큰 답변 Cumbayah. 또한 AO 코드를 테스트하는 많은 dificulties 단위가 있습니다. 당신이 준 예제는 훌륭했고 (IViewRefresher) 나는 이것을 내 작품에 적용 할 수 있습니다. 다른 예를 들어 줄 수 있습니까?
George Silva

감사합니다 Cumbayah. 이것이 현재 중소형 프로젝트에서 수행하는 작업으로 모든 AO 구현을 추상화하기 위해 별도의 어셈블리를 만듭니다. 저장된 데이터에 의존하지 않고 테스트하고 싶은 추상화입니다. XML 작업 영역이나 일종의 지리 데이터베이스입니다. 다른 데이터로 때때로 새로운 문제가 발생하여 테스트를해야하므로 추가 테스트 데이터가 필요하다는 것을 알게되었습니다. 시간이 지남에 따라 모든 테스트 사례에 대한 테스트 데이터가 너무 많아 프로젝트를 관리하고 이동하기가 어려워지고 자동화 된 빌드 서버를 통해 다운로드 할 수있게되었습니다.
BlinkyBill

Cumbayah, 이것은 믿어지지 않는 것 같습니다. 나는 몇 가지 예를 좋아합니다. ESRI 회의 중 하나에서이 주제에 대해 발표하는 것을 고려한 적이 있습니까? ESRI / GIS 커뮤니티가 이런 종류의 것들 때문에 죽어 가고 있다고 생각합니다. ArcObjects를 테스트 / 모의하기 위해 오픈 소스 움직임이 시작되는 것을보고 싶습니다.
Keith G

이것은 내가 이해하는 오래된 주제이지만 "자신의 형상 팩토리"샘플을 얻을 수 있을까요? 조직을 단위 테스트 방향으로 옮기려고 노력하고 있지만 ArcObjects 원숭이에 매달리고 있습니다.
Luke

4

Dave Bouwman과 Brian Noyle의 Esri Developers대한 단위 테스트는 특히 좋은 코드 입니다.


포인터 bwreilly에게 감사합니다. Dave가하는 일은 단순히 기능의 XML 표현을 사용하는 것입니다. 따라서 도움이되는 동안 여전히 테스트를 위해 데이터를 저장하는 데 의존합니다.
BlinkyBill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.