2009-04-30 4 views
5

저는 이것이 상당히 주관적이라고 알고 있습니다 만, 조롱에 대한 테스트와 학습에 뛰어 들고있어 사용해야하는 프레임 워크를 파악하려고합니다. 당신이 추천 할 수있는 것이 무엇인지 말해 주실 수 있다면, 가장 중요한 것은 입니다. 다른 사람들보다 더 나은 이유는입니다. 또는 누군가가 도움이 될만한 부분을 비교할 수있는 곳을 아는 경우..net에 대한 최고의 오픈 소스 모의 프레임 워크를 찾고 있습니다.

+0

이러한 프레임 워크 중 어떤 프레임 워크에는 자동 확장 기능이 있는지 고려해야 할 수도 있습니다. 예를 들어 AutoFac 및 AutoFixture는 모두 Moq를 지원하지만이 두 모델 모두 다른 조롱을 지원합니다. 프레임 워크 (Rhino, NS substitute 등)도 제공합니다. 패키지 관리자에게 시간을 할애하여 패키지 관리자의 인기도와 최근에 선택 사항을 업데이트 한 시간을 확인하십시오. – LightCC

답변

3

나는 RhinoMocks를 좋아하지만, 내가 사용했던 유일한 사람 :}이 유망 보인다

: http://code.google.com/p/mocking-frameworks-compare/

+0

당신이 갖고있는 특별한 좋아요/싫어요가 있습니까? – Micah

+0

죄송합니다, 당연하지 ... 배우고 시작하기가 꽤 쉬웠습니다. 개발자는 dev 커뮤니티에서 매우 적극적이며 존경받는 사람입니다. – squillman

3

나는 또한 RhinoMocks를 사용하고 있습니다. 나는 특히 AAA (Arrange-Act-Assert) 패턴을 좋아한다. RhinoMocks를 사용하면이 패턴을 사용하여 기대치를 쉽게 설정하고 확인할 수 있습니다. 구문은 LINQ와 잘 맞는 lambdas 및 chaining을 사용합니다. 구문의 유사성은 이해에 도움이되며 코드를 더 간단하게 만듭니다. 내가 가지고있는 유일한 문제는 거대하지 않다. 방법을 모의하기 위해서는 가상 일 필요가있다. 인터페이스에서 리팩토링하는 것을 "강요"하지만 인터페이스가 실제로 필요하지 않은 경우 고통이 될 수 있다는 점에서 이것은 좋은 의미입니다. 일부 프레임 워크 클래스 조롱을 더 어렵게 만들 수 있습니다. 클래스 메소드를 가상으로 표시하거나 프레임 워크 클래스로 표시하여 대신 모의하는 래퍼를 만들면이 문제를 해결할 수 있습니다. 이 문제는 RhinoMocks만의 고유 한 문제는 아닙니다.

+1

Moq는 모든 것이 추상적이거나 인터페이스를 구현하거나 가상 멤버가 있어야한다는 점에서 동일한 "제한"을 가지고 있습니다. – TheMissingLINQ

0

. http://www.nmock.org/

그러나 이것은 내가 사용한 유일한 것입니다.

+2

NMock의 문제는 (적어도 내가 사용했을 때의 문제) 모든 메소드 이름이 문자열이라는 것이 었습니다. 즉, 인터페이스를 변경할 때 컴파일러 도움말을 얻지 못합니다. 또한 리팩토링 도구가 테스트를 성공적으로 변경하지 못한다는 것을 의미합니다. Rhino와 Moq은 최소한 인터페이스와 리팩토링 툴을 변경하면 컴파일되지 않습니다. –

+0

공정한 의견 - 다른 사람들을 볼 시간이라고 생각합니다. – Peanut

6

저는 Rhino.Mocks, Moq & NMock을 사용했습니다. 나는 Moq를 선호했다.

는 지금 NSubstitute를 사용하여 ... 그 구문은 MOQ 년대의 훨씬 우수한 것을 발견하고는 전원의 방법으로 아무것도 희생하지 않습니다.

이 같은 테스트를 작성하는 데 사용 :

지금은 비 람다 eryness에 대한

[Test] 
public void NSubTest() 
{ 
    var mock = Substitute.For<IFoo>(); 
    var sut = new SystemUnderTest(mock); //much nicer! 
    mock.Bar().Returns("Look ma! No lambdas!"); 

    sut.DoSomething(); 

    mock.Received().Baz(); 
} 

최종 점을 푹 빠졌

[Test] 
public void SomeOtherTest() 
{ 
    //Arrange 
    var mock = new Mock<IFoo>(); 
    var sut = new SystemUnderTest(mock.Object); //never liked doing it this way... 
    mock.Setup(m => x.Bar()).Returns("A whole bunch of ceremonial syntax.."); 
    //Act 
    sut.DoSomething(); 
    //Assert 
    mock.Verify(m => m.Baz()); //Baaaaah, more laaaaambdas 
} 

.. 그 GitHub의에 ...

http://nsubstitute.github.com/

관련 문제