您將如何通過MOQ單元測試FTPWebRequest和FTPWebResponse。單元測試FTPWebRequest/FTpWebResponse
2
A
回答
1
你不能模擬FTPWebRequest或FTPWebResponse與Moq,因爲它只允許你模擬接口或抽象類。當他們編寫大部分System.Net命名空間時,它並不像MS想到可測試性。這是我從Moq轉移到RhinoMocks的主要原因。
您需要構建自己的FTPWeb *對象並將它們傳遞給您的處理程序。
0
模擬也是不可能的,因爲FTPWebResponse
沒有暴露的構造函數允許從它派生出某些東西。
下面是我在類似的情況下編寫測試的方法。被測
方法:ExceptionContainsFileNotFound(Exception ex)
包含以下邏輯:
if (ex is WebException)
{
var response = (ex as WebException).Response;
if (response is FtpWebResponse)
{
if ((response as FtpWebResponse).StatusCode == FtpFileNotFoundStatus)
{
return true;
}
}
}
爲了測試它,我實現快速的把戲。
try
{
var request = WebRequest.Create("ftp://notexistingfptsite/");
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.GetResponse();
}
catch (WebException e)
{
// trick :)
classUnderTest.FtpFileNotFoundStatus = FtpStatusCode.Undefined;
var fileNotFoundStatus = classUnderTest.ExceptionContainsFileNotFound(e);
Assert.That(fileNotFoundStatus, Is.True);
}
(當然FtpFileNotFoundStatus不暴露給世界。)
0
對於我使用犀牛框架。
即使沒有公共構造函數,只讀屬性等,它也可以處理實例創建。
例子:
var ftpWebResponse = Rhino.Mocks.MockRepository.GenerateStub<FtpWebResponse>();
ftpWebResponse.Stub(f=>f.StatusCode).Return(FtpStatusCode.AccountNeeded);
相關問題
- 1. 單元測試測試
- 2. CakePHP測試 - 單元測試
- 3. 單元測試
- 4. 單元測試
- 5. 單元測試
- 6. 單元測試
- 7. 單元測試
- 8. 單元測試
- 9. 單元測試
- 10. 單元測試
- 11. 單元測試
- 12. 單元測試
- 13. 單元測試
- 14. 單元測試
- 15. 單元測試
- 16. 單元測試()
- 17. 單元測試
- 18. 單元測試
- 19. 單元測試
- 20. Simple單元測試簡單單元測試
- 21. 單元測試Url.Action
- 22. 當單元測試
- 23. 單元測試Observable.interval
- 24. 單元測試GetManifestResourceStream
- 25. 單元測試Scanf
- 26. 單元測試System.IO.FileStream
- 27. 單元測試MvvmCross.Droid.View
- 28. 單元測試#ifdef
- 29. 單元測試iOS
- 30. 單元測試unityContainer.Resolve
是啊,我剛發現。感謝您的答覆。 – 2011-03-30 11:03:26
你會如何使用RhinoMocks來模擬ftprequest?謝謝 – 2011-03-30 11:10:22