SOAP 웹 서비스를 호출하는 작은 콘솔 응용 프로그램을 상속 받았습니다. 그것은 여러 가지 방법으로 예외를 기록하는 중첩 된 try-catch의 비극적 인 혼란입니다. SoapException이 throw 될 때 동작하는 방법에 대해 몇 가지 테스트 범위를 감싸고 싶습니다.단위 테스트 오류 처리에 Moq을 사용하여 SoapException을 조롱하는 방법
질문 : 인터페이스를 모의 할 수없고 "가상"속성이나 메서드를 만들 수 없을 때 어떻게 Moq을 사용하여 SoapException과 같은 클래스를 조롱 할 수 있습니까?
조금 더 설명 :
이 오류 처리를 테스트하려면, 나는 오류 처리를 확인하기 위해 SoapException 개체의 Actor
특성뿐만 아니라 Detail
속성을 제어 할 필요가있다.
내 단위 테스트 코드의 조각 :시 SetupGet(...)
라인을 실행할 때
Actor
속성은 "가상"으로 표시되지 않기 때문에
[TestMethod]
public void MyTestMethod()
{
Mock<SoapException> soapMock = new Mock<SoapException>(MockBehavior.Strict);
soapMock.SetupGet<string>(ex => ex.Actor).Returns("Test Actor");
는, MOQ이 예외를 던지고있다 테스트 실행 :
: 가상이 아닌 (VB에서 재정의) 구성원의 잘못된 설치System.NotSupportedException : 전 => ex.Actor
약간의 읽기 후에 이상적인 대답은 인터페이스를 조롱하는 것입니다.이 경우에는 할 수 없습니다. 이 클래스는 .Net 프레임 워크에서 구워 졌기 때문에 마법처럼 Actor
속성을 가상으로 표시 할 수는 없습니다.
어떻게 SoapException을 조롱하거나 오류 처리를 확인할 수있는 다른 방법이 있습니까?
제쳐두고, 나는 내부에 XML 노드가있는 실제 SoapException을 만들었지 만 프로그래밍 방식으로 XML 문서 트리를 만드는 토끼 구멍에 빠져 들었습니다. 내가 수 할 수 있지만 가능하면 피하고 싶습니다 테스트 설치 코드의 더 많은 라인이 필요합니다.
나는 이것을 시험해 보겠다. 감사. –
필자는 Microsoft Fakes에 Visual Studio 2012 이상이 필요하다는 것을 발견했습니다. 나는 Visual Studio 2010을 가지고 있지만 [Microsoft Moles Framework] (http://visualstudiogallery.msdn.microsoft.com/b3b41648-1c21-471f-a2b0-f76d8fb932ee/)가 Fakes의 전신 인 것을 알았습니다. 나는 그것을 시도 할 것이지만, 나는 현재의 대답이기 때문에이 질문을 대답으로 표시하고있다. 또한 Visual Studio 2010에 대한 내 대답도 게시 할 것입니다. –