2012-12-05 1 views
0

StructureMap.AutoMocking에 제공된 자동 조롱 프레임 워크를 사용하여 CUT 내에서 내부 가상 메서드를 테스트 할 수 있습니까? 적절한 AssemblyInfo.cs 파일에 이미 InternalsVisibleTo를 추가했습니다. 여기에 내가 할 노력하고있어 무엇 :StructureMap.AutoMocking을 사용하여 내부 가상 메서드를 테스트 할 수 있습니까

public ClassA { 
    public void Method1() { Method2(); } 
    internal virtual void Method2() { /* do work */ } 
} 

[Test] 
public void TestClassA() { 

    // Arrange 
    var mockedClass = new RhinoAutoMocker<ClassA>(); 
    mockedClass.PartialMockTheClassUnderTest(); 
    mockedClass.ClassUnderTest.Expect(x => x.Method2()); 

    // Act 
    mockedClass.ClassUnderTest.Method1(); 

    // Assert 
    mockedClass.ClassUnderTest.VerifyAllExpectations(); 
} 

은 이미 공공의 내부 방법을 변경,하지만 난 생각하지 않는 것은이이 테스트를 수행 할 수있는 허용 방법임을 알아. 아마도 RhinoMocks와 StructureMap이 상호 작용하는 방식에 대해 근본적인 것이 빠졌을 것입니다.하지만이 유형의 것이 작동해야한다고 다른 단위 테스트를 기반으로 생각했습니다.

편집 나는 내가 이것을 시도 할 때 내가 오류 메시지를 제공하는 데 도움이 될 것이다 가정 :

System.InvalidOperationException : Invalid call, the last call has been used or no call  
has been made (make sure that you are calling a virtual (C#)/Overridable (VB) 
method). 
at Rhino.Mocks.LastCall.GetOptions() 
at Rhino.Mocks.RhinoMocksExtensions.Expect(T mock, Func`2 action) 
at Rhino.Mocks.RhinoMocksExtensions.Expect(T mock, Action`1 action) 
at ClassATest.TestClassA() in ClassA.cs  

답변

0

편집 내 아래 문장에서 잘못입니다. 나는 마침내 이것에 동그라미를 치고 protected 키워드를 사용하여 테스트중인 클래스 내에서 internal virtual 개의 메소드를 테스트하는 모든 단위 테스트에 사용했습니다. 이 DOES은 구조지도에서 작동하며 내가받은 오류를 수신하는 유일한 이유입니다.

약간의 연구 끝에 Rhino.Mutom의 일부 요소가 StructureMap.Automocker를 통해 액세스 할 수없는 것으로 보입니다. Rhino.Mocks 프레임 워크 만 사용하도록 유닛 테스트를 다시 할 때 테스트 러너에게 '내부 가상'메소드를 노출 할 수있었습니다. 이상적인 상황이 아니며, 새로운 버전의 StructureMap에서이 문제에 대한 지원을보고 싶습니다.하지만 내부 가상 메소드에 대한 지원을 추가하기 전에 다른 중요한 것들이 있다면 먼 길을 걸을 수 있습니다. 나는 다음과 같은 게시물을 기반으로 내 유닛 테스트-일 다시

:

http://ayende.com/Wiki/Rhino+Mocks+-+Internal+Methods.ashx

How to mock protected virtual members with Rhino.Mocks?