2011-08-25 3 views
0

조롱 프레임 워크에서 Rhino에서 FakeItEasy로 전환하는 것을 고려하고 있습니다. 주된 이유는 단순성입니다. FakeItEasy에서는 일을 처리하는 유일한 방법이 있습니다. Rhino에는 레코드/재생, AAA, 스텁, 부분 모의, 엄격한 모의, 동적 모의 등이 있습니다.Rhino와 FakeItEasy 간의 동작 차이점

FakeItEasy를 사용하여 Rhino가 현재하고있는 모든 작업을 수행 할 수 있도록 테스트를 다시 작성하고 있습니다. 내가 설명 할 수없는 어떤 것을 만나고 누군가가 나를 계몽 할 수 있기를 바랐다.

Rhino에서 다음 테스트를 수행합니다. 코드는 축약되었습니다.

ConfigurationManagerBase configManager = _mocks.Stub<ConfigurationManagerBase>(); 

using(_mocks.Record()) 
{ 
    SetupResult 
     .For(configManager.AppSettings["ServerVersion"]) 
     .Return("foo"); 
} 

코드 실행이 잘 부착되고, 검사가 통과되는 단위 테스트. 나는 다음과 같이 FakeItEasy를 사용하여 그것을 다시 썼다. 내가 테스트를 실행할 때

ConfigurationManagerBase configManager = A.Fake<ConfigurationManagerBase>(); 

A.CallTo(() => configManager.AppSettings["ServerVersion"]) 
    .Returns("foo"); 

지금은 실패하지만 FakeItEasy 예외를 던지고 때문이다.

The current proxy generator can not intercept the specified method for the following reason: 
    - Non virtual methods can not be intercepted. 

Rhino에는 동일한 제한이 있으므로 이상하게 보입니다. AppSettings가 ConfigurationManagerBase에서 가상이지만 인덱서 속성이 아니라는 점에서 우리가 생각하는 것입니다. 우리는 FakeItEasy 테스트를 변경하여 문제를 수정했습니다.

NameValueCollection collection = new NameValueCollection(); 
collection.Add("ServerVersion", "foo"); 

A.CallTo(() => configManager.AppSettings) 
    .Returns(collection); 

나는 기본적으로 그냥 FakeItEasy 뭔가 잘못하고 있어요 여부를 이해하려고 노력 중이 야 또는 코뿔소는 인덱서와 배후 일부 "마법"을 수행?

+0

을 다이나믹했을 때의 엄격한 모의. 테스트가 작동하지 않거나 부정확 한 결과를주었습니다. 우리는 그러한 일들이 일어날 확률을 낮추고 싶습니다. 그런데, 포스트의 목적은 내가 다른 행동을 이해하도록 도와주는 것이지, 우리가 전환을해야하는지 아닌지를 논하는 것이 아닙니다. –

+1

전혀 모르겠지만 Rhino에서 "공동으로"작동한다고 생각합니다. 그 이유 중 몇 가지 대안이 있습니다. 아마도 인덱서는 가상이 아니지만 GetItem ("ServerVersion") 등과 같은 가상 메서드를 내부적으로 호출합니다. FakeItEasy는 표현식을 파싱하고 인덱서를 직접 사용하기 때문에 동일한 경우가 발생하지 않습니다. 이것을 확인하기 위해 FakeItEasy에서 사용할 수있는 레코드/재생 모델을 사용할 수도 있습니다 (그러나 대부분의 경우 사용하면 안됩니다). –

답변

0

다음 구성 마법 뭔가 무엇 Rhino에서이 코뿔소를 작동하지 않을 경우 유사해야합니다 : 우리는 그들이 진짜로 모의 객체를 원 할 때 사람들이 스텁을 만들 경우 많은 문제가 있었다, 또는 만든

NextCall.To(configManager.AppSettings).Returns("foo"); 
var ignored = configManager.AppSettings["ServerVersion"]; 
관련 문제