.NET를위한 가장 인기 있고 친근한 조롱 라이브러리
var mock = new Mock <ilovethislibrary> (); // 우와! 레코드/재생 이상함이 없습니까?! :) mock.setup (library => library.downloadexists ( "2.0.0.0")) .returns (true); // 모의의 개체 속성을 사용하여 개체에 대한 참조를 얻습니다. // IlovethisLibrary를 구현 한 다음 호출하여 운동하십시오 // 방법 ilovethislibrary lovable = mock.object; bool download = lovable.downloadexists ( "2.0.0.0"); // 주어진 방법이 실제로 예상 값으로 한 번만 호출되었는지 확인하십시오. mock.verify (library => library.downloadexists ( "2.0.0.0"), times.atmentonce ());
MOQ는 또한 지금까지 LINQ를 조롱에 제공 한 최초이자 유일한 라이브러리이므로 위의 동일한 동작이 훨씬 간결하게 달성 될 수 있습니다.
ilovethislibrary lovable = mock.of <ilovethislibrary> (l => l.downloadexists ( "2.0.0.0") == true); // 메소드를 호출하여 모의로 반환 한 인스턴스를 연습합니다 ... bool download = lovable.downloadexists ( "2.0.0.0"); // 반환 된 상태를 간단히 주장합니다. assert.true (다운로드); // 주 테스트를 넘어서고 싶다면 // 대신 모의 상호 작용을 확인하십시오 ... mock.get (lovable) .verify (library => library.downloadexists ( "2.0.0.0"));
당신은 Linq에서 조롱하는 것을 "조롱의 우주에서, 행동 이이 표현과 일치하는 사람을 줘"라고 생각할 수 있습니다.
더 많은 예를 보려면 QuickStart를 확인하십시오!
MOQ ( "Mock-You"또는 "Mock"으로 발음). NENT LINQ 발현 트리 및 람다 표현식을 최대한 활용하기 위해 .NET을위한 유일한 조롱 라이브러리입니다. 리팩토링 친화적 인 조롱 라이브러리를 사용할 수 있습니다. 그리고 클래스뿐만 아니라 조롱 인터페이스를 지원합니다. API는 매우 간단하고 간단하며 조롱 개념에 대한 사전 지식이나 경험이 필요하지 않습니다.
이 라이브러리는 주로 조롱 라이브러리를 사용하지 않는 개발자 (또는 다른 구현의 복잡성에 불쾌감을 느끼고) 일반적으로 자신의 모의를 수동으로 작성하는 개발자 (다소 "환상")를 위해 만들어졌습니다. 이 상황에서 대부분의 개발자들은 또한 실용적이며 State (또는 고전적인) TDD를 준수합니다. 다른 조롱 라이브러리의 진입 장벽이 약간 높고 더 단순하고 가볍고 우아한 접근 방식이 가능하다는 느낌이 들었습니다. MOQ는 LINQ로 알려진 우아하고 컴팩트 한 C# 및 VB 언어 기능을 최대한 활용 하여이 모든 것을 달성합니다 (약어에서 알 수 있듯이 쿼리만을위한 것이 아닙니다).
MOQ는 테스트에 대한 종속성을 신속하게 설정할 수있는 매우 실용적이고 눈에 띄지 않으며 간단한 방법으로 설계되었습니다. API 디자인은 초보자 사용자조차도 "성공의 구덩이"에 빠지고 조롱의 가장 일반적인 오용/학대를 피합니다.
그것이 고안되었을 때, 그것은 다른 모든 라이브러리의 일반화되고 다소 직관적이지 않은 (특히 초보자) 레코드/재생 접근 방식에 반대하는 유일한 조롱 라이브러리였습니다 (그리고 좋은 일이었을 것입니다).
레코드/재생을 사용하지 않으면 일반적인 기대치를 고정 장치 설정 방법으로 옮기고 특정 단위 테스트에서 필요할 때 이러한 기대치를 무시하는 것이 간단하다는 것을 의미합니다.
"Why"에 대한 자세한 내용을 읽고 Kzu의 블로그에서 멋진 스크린 샷을 볼 수 있습니다.
매우 간단한 API를 느끼고 NUGET에서 설치하려면 빠른 스테이트 예제를 참조하십시오.
Kzu의 블로그에서 발표에 대해 읽으십시오. Scott Hanselman의 Mock Libraries 상태에 대한 배경 지식을 얻으십시오.
MOQ는 원래 Clarius, Manas 및 Instedd에 의해 개발되었습니다.
MOQ는 Castle DynamicProxy를 내부적으로 사용하여 조롱을 가능하게합니다.
MOQ는 다음과 같은 기능을 제공합니다.
강한 유형 : 기대를위한 문자열 없음, 객체 유형 리턴 값 또는 제약 조건 없음
탁월한 vs Intellisense 통합 : 모든 것이 기대 설정에서 메소드 호출 인수, 반환 값 등 지정에 이르기까지 전체 vs Intellisense를 지원합니다.
배울 수있는 기록/재생 관용구가 없습니다. 조롱을 구성하고, 설정하고, 사용하고, 선택적으로 통화를 확인하십시오 (스텁 만 작동 할 때 또는 테스트중인 객체에서 반환 된 값을 확인하여 더 고전적인 상태 기반 테스트를 수행 할 때 모의를 확인할 수 없습니다. ))
이전 3 점의 결과로 매우 낮은 학습 곡선. 대부분의 경우 문서를 읽을 필요조차 없습니다.
간단한 모의 행동에 대한 모의 행동에 대한 세분화 제어 (모의, 스터브, 가짜, 역동적 인 모의 등의 이론적 차이가 무엇인지 배울 필요가 없습니다).
인터페이스와 클래스를 모두 조롱합니다
기대 위반 : 비품 설정에서 기본 기대치를 설정하고 테스트에서 필요에 따라 재정의 할 수 있습니다.
조롱 된 클래스에 대한 생성자 인수를 통과합니다
모의에 이벤트를 가로 채고 제기하십시오
out/ref
논쟁에 대한 직관적 인 지원
우리는 당신이 가질 수있는 모든 피드백에 깊이 감사합니다! 채팅에 자유롭게 참여하거나 문제 추적기에 문제를보고하십시오.
Github 스폰서에 대해 자세히 알아보십시오