2014-10-09 3 views
1

통합 테스트를 위해 서버를 사용하지 않고 FtpWebRequest.GetResponse()를 위조하려고합니다. 내가 뭘하려고 노력한 간단한 가짜 FtpWebResponse를 반환하지만, 내부이기 때문에 당신은 FtpWebResponse에 대한 생성자에 액세스 할 수 없습니다. 여기 가짜 FtpWebResponse를 만드는 방법

내 코드입니다 :

생산 코드 : 나는 가짜 FtpWebResponse 돌아갈 때 사용하려고

  using (FtpWebResponse response = (FtpWebResponse) ftpWebRequest.GetResponse()) 
      { 
       ftpResponse = new FtpResponse(response.StatusDescription, false); 
      } 

테스트 가짜 : 결국

  ShimFtpWebRequest.AllInstances.GetResponse = request => 
      { 
       FtpWebResponse ftpWebResponse= new FtpWebResponse(/*parameters*/); // not allowed because it is internal 
       ftpWebResponse.StatusDescription="blah blah blah"; 
       return ftpWebResponse; 
      }; 

을, 내가 원하는 모든 해야 할 일은 내 테스트에서 어설 션을위한 가짜 ftpWebResponse를 반환하는 것입니다. 어떤 아이디어? 감사합니다.

답변

0

답을 찾았습니다. FtpWebResponse를 Shim하면 생성자가 허용됩니다.

 FtpResponse response; 

     using (ShimsContext.Create()) 
     { 
      ShimFtpWebRequest.AllInstances.GetResponse = request => new ShimFtpWebResponse(); 
      ShimFtpWebResponse.AllInstances.StatusDescriptionGet = getDescritpion => "226 Transfer complete."; 
      _ftpConnection.Put(_fileContent); 
      response = new FtpResponse("226 Transfer complete.", false); 
     } 
     Assert.AreEqual(response.Message, "226 Transfer complete."); 
     Assert.IsFalse(response.HasError); 
+0

이 대답은 위의 Visual Studio Premium 또는 필요하다는 것을 주목해야한다. 내가 도움이 될만한 Prig이라는 대안이 있지만 그렇지 않은 경우에는 모두에게 도움이되지 않는 프리미엄 솔루션 *으로 간주되어야합니다. – Maffelu

0

Rhino 프레임 워크에서 수행 할 수 있습니다. 그리고 그것은 Nuget 추가 할 수 있습니다 :

예 :

var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>(); 
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded); 
관련 문제