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