저는 이것이 상당히 주관적이라고 알고 있습니다 만, 조롱에 대한 테스트와 학습에 뛰어 들고있어 사용해야하는 프레임 워크를 파악하려고합니다. 당신이 추천 할 수있는 것이 무엇인지 말해 주실 수 있다면, 가장 중요한 것은 입니다. 다른 사람들보다 더 나은 이유는입니다. 또는 누군가가 도움이 될만한 부분을 비교할 수있는 곳을 아는 경우..net에 대한 최고의 오픈 소스 모의 프레임 워크를 찾고 있습니다.
답변
Moq이 가장 앞선 것입니다. .NET 3.5 및 C# 3.0의 모든 기능을 사용합니다. 이것은 흥미로운 일이 될 것이다 : 나는 NMock을 사용하고 우수한 생각했습니다
+1! 나는 NMock, Rhino Mocks 및 Moq을 사용했습니다. Moq은 내 의견으로는 가장 좋은 것입니다 –
나는 RhinoMocks를 좋아하지만, 내가 사용했던 유일한 사람 :}이 유망 보인다
나는 또한 RhinoMocks를 사용하고 있습니다. 나는 특히 AAA (Arrange-Act-Assert) 패턴을 좋아한다. RhinoMocks를 사용하면이 패턴을 사용하여 기대치를 쉽게 설정하고 확인할 수 있습니다. 구문은 LINQ와 잘 맞는 lambdas 및 chaining을 사용합니다. 구문의 유사성은 이해에 도움이되며 코드를 더 간단하게 만듭니다. 내가 가지고있는 유일한 문제는 거대하지 않다. 방법을 모의하기 위해서는 가상 일 필요가있다. 인터페이스에서 리팩토링하는 것을 "강요"하지만 인터페이스가 실제로 필요하지 않은 경우 고통이 될 수 있다는 점에서 이것은 좋은 의미입니다. 일부 프레임 워크 클래스 조롱을 더 어렵게 만들 수 있습니다. 클래스 메소드를 가상으로 표시하거나 프레임 워크 클래스로 표시하여 대신 모의하는 래퍼를 만들면이 문제를 해결할 수 있습니다. 이 문제는 RhinoMocks만의 고유 한 문제는 아닙니다.
Moq는 모든 것이 추상적이거나 인터페이스를 구현하거나 가상 멤버가 있어야한다는 점에서 동일한 "제한"을 가지고 있습니다. – TheMissingLINQ
그러나 이것은 내가 사용한 유일한 것입니다.
NMock의 문제는 (적어도 내가 사용했을 때의 문제) 모든 메소드 이름이 문자열이라는 것이 었습니다. 즉, 인터페이스를 변경할 때 컴파일러 도움말을 얻지 못합니다. 또한 리팩토링 도구가 테스트를 성공적으로 변경하지 못한다는 것을 의미합니다. Rhino와 Moq은 최소한 인터페이스와 리팩토링 툴을 변경하면 컴파일되지 않습니다. –
공정한 의견 - 다른 사람들을 볼 시간이라고 생각합니다. – Peanut
저는 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의에 ...
리차드 뱅크스의 series of posts comparing mocking frameworks이 유용 할 수 있습니다.
주는 : 전체 공개의 관심에서 나는 비교에 꽤 호의적으로 나오는 NSubstitute의 공동 저자입니다.:)
이러한 프레임 워크 중 어떤 프레임 워크에는 자동 확장 기능이 있는지 고려해야 할 수도 있습니다. 예를 들어 AutoFac 및 AutoFixture는 모두 Moq를 지원하지만이 두 모델 모두 다른 조롱을 지원합니다. 프레임 워크 (Rhino, NS substitute 등)도 제공합니다. 패키지 관리자에게 시간을 할애하여 패키지 관리자의 인기도와 최근에 선택 사항을 업데이트 한 시간을 확인하십시오. – LightCC