Mocking Framework를 선택하는 주요 요인은 무엇입니까?


15

단위 테스트에서 객체를 시작하려고합니다. 훌륭한 조롱 프레임 워크가 많이있는 것 같습니다.

  1. 다른 프레임 워크에 다른 대상 고객이 있습니까?
  2. 상황에 맞는 프레임 워크를 선택할 때 고려해야 할 요소는 무엇입니까?

나는 .Net 환경에서 일하고 있지만 일반적인 모의 프레임 워크에 적용 할 수 있도록 질문했습니다.
epotter

답변:


14

다른 프레임 워크에 다른 대상 고객이 있습니까?

예. Microsoft Moles , TypeMock IsolatorJustMock 과 같은 일부 프레임 워크를 사용하면 거의 모든 것을 조롱 할 수 있습니다. 이러한 모의 도구는 일반적으로 기존 레거시 코드에서 도구를 사용하려는 개발자에게 더 적합합니다. 더 테스트 가능한 디자인으로 리팩토링 할 수 없기 때문입니다. *

전통적으로 테스트 가능한 디자인은 코드베이스가 인터페이스, 추상 클래스, 가상 메소드, 봉인되지 않은 클래스 등을 자유롭게 사용해야 함을 의미합니다. 따라서 MoqRhinoMocks 와 같은 전통적인 조롱 프레임 워크는 Test Driven Development, Dependency Injection 및 다른 개념들. 그건 그렇고, 테스트 할 수있는 코드뿐만 아니라 유지 보수가 쉬운 코드도 얻을 수 있으므로 Dependency Injection을 사용하는 것이 좋습니다.

상황에 맞는 프레임 워크를 선택할 때 고려해야 할 요소는 무엇입니까?

  • 개발 활동. Moq 및 RhinoMocks와 같은 도구는 매우 활발하고 널리 사용되므로 최신 상태입니다.
  • 오픈 소스 대. 상업용 . 이 비교에 전형적인 다양한 장단점을 고려하십시오. 비용, 지원 등
  • 성숙. 도구가 얼마나 새롭습니까? 베타 버전 (예 : Microsoft Moles)입니까, 아니면 여러 가지 안정적인 릴리스가 있습니까? 예를 들어 레거시 코드로는 Moles가 마음에 들지만 해결해야 할 몇 가지 버그가 있으며 해결되기 전에 기다려야합니다 (다음 릴리스 11 월 11 일).
  • 선적 서류 비치. 단위 테스트, 조롱, 자동 조롱 등을 다루는 여러 서적과 블로그가 있습니다. 또한 도구 자체의 문서가 얼마나 좋은가요?
  • 구문 . 각 도구에는 같은 것을 말하는 자체 방식이 있습니다. 어느 것이 더 적합한 지 확인하십시오.
  • 속도 . CLR 프로파일 링 (TypeMock, Moles, JustMock)을 사용하는 도구는 기존 도구 (Moq, RhinoMocks)보다 훨씬 느릴 수 있습니다. 많은 단위 테스트를 누적 할 때이 속도 불이익이 문제가 될 수 있습니다. 경험상 테스트가 초당 1/10보다 오래 걸리면 너무 느립니다.
  • 커뮤니티 지원 . 다른 개발자가 모의 도구로 확장하거나 칭찬하는 다른 도구를 작성하고 있습니까? Moq에 자동 조롱 기능을 추가 하는 Moq.Contrib 프로젝트가 있습니다 (테스트 작성 시간을 단축하는 데 도움이 됨). 더 나은 아직,이 AutoFixture , AutoFixture.AutoMoq, 또한 자동 조롱 플러스 익명 변수 생성을 허용 AutoFixture.AutoRhinoMocks.

* 기존의 테스트 (및 조롱) 도구와 함께 사용할 수있는 코드로 테스트없이 코드를 천천히 리팩터링하는 방법에 대한 방법은 레거시 코드를 사용한 효과적인 작업을 참조하십시오 .


2

MOQ 튜토리얼 TypeMock 아이솔레이터, RhinoMocks 및 MOQ : 몇 가지 특정 도구와 관련이 설명 시작 부분에 배경, 철학, 그리고 논쟁의 오른쪽에있는 섹션이 있습니다. Moq를 설명하기 위해 작성되었으므로 자연스럽게 약간 비뚤어져 있지만 모의 프레임 워크의 차이점을 이해하려고 할 때 도움이되는 것으로 나타났습니다.

C # Mocking Frameworks 에서이 SO 스레드에 대한 응답 도 유용하다는 것을 알았습니다 . 대부분 사용자가 실제로 유용하다고 생각하는 하나의 Mocking Framework를 참조하지만 HaraldV 의 프록시 기반 모의 및 프로파일 러 기반 모의에 대한 답변이 있습니다 .

또한 온라인에서 비교 차트를 찾을 수있었습니다. 2009 년 이후 였으므로 최신인지 잘 모르겠습니다. TypeMock 및 콜백에 대한 정보가 오래되었다는 의견이 하나 이상 있지만 RhinoMocks, Moq, NMock, 및 TypeMock 비교 차트

쉬운 코드 비교를 위해 여러 조롱 프레임 워크에 테스트 사례가있는 Google 코드 프로젝트가 있습니다 : mocking-frameworks-compare


2
  1. 사용의 용이성. 일부 프레임 워크에는 고급 고급 관용구가 있습니다. 예를 들어, MOQ 에서는 람다를 사용하여 기대치를 인코딩 할 수 있습니다. 일부 오래된 라이브러리는이를 지원하지 않습니다.
  2. 속도. 각 단위 테스트는 빠르므로 전체 라이브러리를 실행하는 데 몇 시간이 걸리지 않습니다. 일부 조롱 프레임 워크에는 정적으로 생성 된 조롱이있어 빠릅니다. 다른 프레임 워크는 런타임에 코드를 동적으로 생성하므로 속도가 느립니다.
  3. 지원하다. 수정 프로그램에서 적극적으로 지원되고 새 버전의 .NET이 릴리스 될 때 업데이트되도록 업데이트 된 프레임 워크가 필요합니다.
  4. 힘. 내가 연구 한 대부분의 조롱 프레임 워크는 힘면에서 거의 동일합니다. 한 가지 눈에 띄는 예외가 있습니다. Microsoft Moles를 사용하면 "밀폐형의 비가 상 / 정적 방법"을 조롱 할 수 있습니다. 이것은 다른 조롱 프레임 워크가 지원하지 않는 것입니다.

우리 팀에서는 Microsoft Moles를 선택했습니다 . # 2, # 3 및 # 4에서 크게이기는 반면, 대부분의 대안보다 관용적이지 않고 # 1에서 가장 낮습니다.


이제 TypeMock, JustMock과 같은 많은 프레임 워크에서 정적 메서드, 봉인 된 클래스 등을 조롱 할 수 있습니다.
muruge
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.