2011-10-17 229 views
4

我在寫一個C++類,它執行一些FTP客戶端操作。我想爲它設置一些測試,所以我需要使用假FTP服務器。假FTP服務器

我一直在尋找一個,我想我可以在Python中編寫一些腳本並使用pyftpdlib。但是我想在每次測試之後設置和拆除服務器都會有一些缺點。

歡迎任何有關如何輕鬆運行假FTP服務器以用C++進行自動測試的建議。

編輯:

我拓寬了我的搜索一點點,發現MockFtpServer,這正是我一直在尋找,但用C++編寫,而不是Java的。

+0

你使用pyftpdlib遇到了什麼問題? –

+0

@Greg:我還沒有嘗試過,但我閱讀了關於基本用法的文檔,並認爲在每次測試中設置並斷開服務器並不容易。但我只是在那裏猜測。我以爲我不會是第一個面臨爲FTP客戶端編寫單元測試問題的SO用戶,所以我可以得到一些建議。 –

+0

pyftpdlib的測試套件包含一個可以啓動和停止的線程化測試服務器,並立即將控制權返回給調用者: http://code.google.com/p/pyftpdlib/source/browse/tags/release-0.7。 0/test/test_ftpd.py#184 –

回答

6

您應該設計可測試性的代碼,在這種情況下,FTP服務器是外部資源。在你的程序和ftp服務器之間定義一個適配器。在測試中,您可以放置​​測試適配器來僞造FTP響應。現在你也可以僞造ftp服務器的不同行爲。

+0

這是否忽略了管理網絡數據包的接口需要測試?用戶需要測試FTP適配器,因此將其從問題中刪除可完全消除問題,並使適配器不受測試。 –

+1

如果你已經編寫了網絡協議,你應該測試它。但是你應該單獨測試它。如果你沒有編寫網絡協議,你必須信任那些做過的人。而且他們已經測試過了。否則,你也應該測試你正在使用的所有os函數。 – Peter

+0

@peer:現在,我正在使用一個組件來實現,我打算稍後將其替換爲我自己的代碼。所以這是限制我的設計。我真的需要使用一個虛假的FTP服務器,實際上是在一個網絡端口上進行測試。我真的想在更換實施時進行測試。 –

1

如果您在談論單元測試,那麼@ peer的答案是正確的。您應該模擬FTP連接,因爲理想情況下,您的單元測試作爲每個構建的一部分運行,並且它們不應該依賴於客戶端軟件包之外的東西。如果您在談論系統/集成測試,那麼您應該有一個支持的生產環境的工作副本,包括一個FTP服務器。我不確定爲什麼你想爲你的系統/集成測試提供一個'虛假'的FTP服務器。可能最好使用客戶端實際使用的FTP服務器。

+0

我想我更傾向於集成測試方面。我的課由提供FTP客戶端功能的對象組成。我可以或多或少輕鬆地創建一個* seam *,以便使用FTP客戶端單獨測試邏輯。儘管如此,我最終還需要測試FTP客戶端邏輯,因此我需要僞造FTP服務器。我的應用程序應該可以與*任何* FTP服務器一起使用,所以我需要根據標準的兼容服務器進行測試。 –

+0

所以我不認爲你需要一個假的FTP服務器進行集成測試,你只需要一些FTP服務器。我不確定你將如何決定使用哪一個,因爲有一個不斷增長(並且已經相當大)的FTP服務器。正如你所建議的那樣,只要它符合FTP標準,應該不會有問題。 – gred